365bet亚洲版登录-bet官网365入口

365bet亚洲版登录拥有超过百间客房,bet官网365入口的文化历经几十年的传承和积淀形成的核心内容获得业界广泛的认可,365bet亚洲版登录是目前信誉最高的娱乐场所,同国内外几百家网上内容供应商建立了合作关系。

Python3爬取百科词条

本文首要介绍使用Python爬虫爬取Python百度词条的消息主要参照慕课网的《开发简单爬虫》以及部分数据库操作

---工欲善其事 必先利其器

首先 这里开辟工具用的Python3.6+Pycharm+MySQL5.7+SQLyog前边2个的设置直接互连网搜下教程一大堆 况且免去了配备意况变量的操作,MySQL数据库今后新星版是5.7 它的设置与事先的略微区别

图片 1图表发自简书App

只顾到没 安装时多了叁个不可能不选项 安装InnoDB时设置password 然后再填入就能够另外步骤和日常软件没什么差别然后去寻找引擎下载SQLyog工具(用Pycharm自带的dataBase应该也得以 有意思味的同伙能够去试试 ) 连接数据库

图片 2图形发自简书App

点击连接 出错的能够看看 步入调控面板→管理工科具→服务→看MySQL service是或不是张开 连接好后创立数据库baikeurl 然后建url表

再建立4个栏位 分别是 id urlname urlhref urlcontent图片 3图片发自简书App

1.传开目的url后调用U牧马人L管理器2.ULANDL管理器对UOdysseyL实行实际的论断与寻觅后传出网页下载器3.网页下载器工作后将网页传入网页解析器4.将深入分析后的剧情(url,title,content等)传入输出器5.末尾输出器实行数据操作(写入文件 导入数据库等)整个进程使用了严酷的面向对象观念每一历程具体的函数都封装在对应文件中

图片 4图表发自简书App图片 5图片发自简书App

要爬取的链接: 百度百科的词条链接:/item/……的花样标题: <dd ><h1>……</h1> 内容:<div >……</div>

废话少之又少说 直接上代码 关键地方带注释 三个囊括5个文本

爬虫调整端

spider.py文件

import html_downloaderimport html_outputerimport html_parserimport url_manager#爬虫主函数class SpiderMain: def __init__: self.urls = url_manager.UrlManager() self.downloader = html_downloader.HtmlDownloader() self.parser = html_parser.HtmlParser() self.outputer = html_outputer.HtmlOutputer()#抓取过程函数 def craw(self, root_url): count = 1 self.urls.add_new_url while self.urls.has_new_url(): try: new_url = self.urls.get_new_url() print('craw %d : %s' % (count, new_url)) html_cont = self.downloader.download new_urls, new_data = self.parser.parse(new_url, html_cont) self.urls.add_new_urls self.outputer.collect_data if count == 1000: break count = count+1 except: print('craw failed') self.outputer.into_mysql()if __name__ == '__main__': rooturl = 'http://baike.baidu.com/item/Python' obj_spider = SpiderMain() obj_spider.craw

url管理器url_manager.py文件

# -*- coding: utf-8 -*-class UrlManager: def __init__: self.new_urls = set() self.old_urls = set() def add_new_url(self, root_url): if root_url is None: return if root_url not in self.new_urls and root_url not in self.old_urls: self.new_urls.add def has_new_url: return len(self.new_urls) != 0 def get_new_url: new_url = self.new_urls.pop() self.old_urls.add return new_url def add_new_urls(self, new_urls): if new_urls is None or len == 0: return for url in new_urls: self.add_new_url

网页下载器html_downloader.py文件

import urllib.requestclass HtmlDownloader: def download(self, new_url): if new_url is None: return None response = urllib.request.urlopen if response.getcode() != 200: return None return response.read()

网页深入分析器html_parse.py文件

import reimport urllibfrom urllib import parsefrom bs4 import BeautifulSoupclass HtmlParser: def parse(self, new_url, html_cont): if new_url is None or html_cont is None: return soup = BeautifulSoup(html_cont,'html.parser' ) new_urls = self._get_new_urls(new_url,soup) new_data = self._get_new_data(new_url,soup) return new_urls,new_data def _get_new_urls(self, new_url, soup): new_urls = set()#获取要爬取的链接 links = soup.find_all('a',href=re.compile(r'/item/w+')) for link in links: new_url1 = link['href'] new_full_url = parse.urljoin(new_url, new_url1) new_urls.add(new_full_url) return new_urls def _get_new_data(self, new_url, soup): res_data = {} res_data['url'] = new_url#<dd ><h1>Python</h1>#获取词条的标题 title_node = soup.find('dd',class_='lemmaWgt-lemmaTitle-title').find res_data['title'] = title_node.get_text()#获取词条的内容 summary_node = soup.find('div',class_='lemma-summary') res_data['summary'] = summary_node.get_text() return res_data

输出器

html_outputer.py文件

class HtmlOutputer: def __init__: self.datas = [] def collect_data(self, new_data): if new_data is None: return print(new_data['summary']) self.datas.append#数据库操作函数 def into_mysql: i = 0 for data in self.datas: conn = pymysql.Connect( host='127.0.0.1', user='你的用户名', password='你的密码', db='数据库名称', port=3306, charset='utf8mb4' ) try: cursor = conn.cursor() i += 1 sql = 'insert into `urls`(`id`,`urlname`,`urlhref`,`urlcontent`)values(%s,%s,%s,%s)'#执行上面的sql语句 并传入4个参数#分别是id,title,url,content cursor.execute(sql, (i, data['title'],data['url'],data['summary'])) conn.commit() finally: conn.close()

注:关于编码难点 因为该网页便是行使的utf-8编码 所以没有须求调用encode()方法编码 直接data['summary']的内容就是正规突显若将数据写入文件 则供给第2个参数字传送入encoding='' 钦命文件编码格局测量检验时尽只怕不要Windows系统自带的IE浏览器 由于默许编码难点会导致显示乱码(那时即令被这些标题找麻烦) 换用记事本或任何浏览器就家常便饭展现了最后点击运维

图片 6图形发自简书App运行爬取网页寻常然后大家去探视数据库图片 7图片发自简书App数据库也导入成功了 到此 我们的供给就完了了 最终附上github地址

本文由365bet亚洲版登录发布于计算机网络,转载请注明出处:Python3爬取百科词条

您可能还会对下面的文章感兴趣: