介绍
这篇文章主要介绍了python中爬虫节点的使用方法,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。
爬虫节点相对简单,主要包含HTML下载器,HTML解析器和爬虫调度器。执行流程如下:
爬虫调度器从控制节点中的url_q队列读
爬取URL虫调度器调用HTML下载器,HTML解析器获取网页中新的URL和标题摘要
最后爬虫调度器将新的URL和标题摘要传入result_q队列交给控制节点
HTML下载器
#编码:utf - 8 import 请求 class HtmlDownloader(对象): , ,,,def 下载(自我,url): ,,,,,,,if url is 没有: ,,,,,,,,,,,return 没有 ,,,,,,,user_agent =, & # 39; Mozilla/4.0,(兼容;,MSIE 5.5;, Windows NT) & # 39; ,,,,,,,头={& # 39;用户代理# 39;:user_agent} ,,,,,,,r =, requests.get (url,头=标题) ,,,,,,,if r.status_code==200: ,,,,,,,,,,,r.encoding=& # 39; utf - 8 # 39; ,,,,,,,,,,,return r.text ,,,,,,,return 没有
HTML解析器
#编码:utf - 8 import 再保险 import urlparse 得到bs4 import  BeautifulSoup , , class HtmlParser(对象): , ,,,def 解析器(自我、page_url html_cont): ,,,,,,,& # 39;& # 39;& # 39; ,,,,,,,用于解析网页内容抽取URL和数据 ,,,,,,,:param page_url:,下载页面的URL ,,,,,,,:param html_cont:,下载的网页内容 ,,,,,,,:返回:返回URL和数据 ,,,,,,,& # 39;& # 39;& # 39; ,,,,,,,if page_url is None 或是html_cont is 没有: ,,,,,,,,,,,回来 ,,,,,,,soup =, BeautifulSoup (html_cont & # 39; html.parser& # 39;, from_encoding=& # 39; utf - 8 # 39;) ,,,,,,,new_urls =, self._get_new_urls (page_url、汤) ,,,,,,,new_data =, self._get_new_data (page_url、汤) ,,,,,,,return new_urls new_data , , ,,,def _get_new_urls(自我、page_url汤): ,,,,,,,& # 39;& # 39;& # 39; ,,,,,,,抽取新URL的集合 ,,,,,,,:param page_url:,下载页面的URL ,,,,,,,:param 汤:汤 ,,,,,,,::返回,返回新URL的集合 ,,,,,,,& # 39;& # 39;& # 39; ,,,,,,,new_urls =, () ,,,,,,,#抽取符合要求的一个标签 ,,,,,,,links =, soup.find_all(& # 39;一个# 39;,href=https://www.yisu.com/zixun/re.compile (r/视图/d +/. htm)) 链接的链接: #提取href属性 new_url=链接(“href”) #拼接成完整网址 new_full_url=urlparse.urljoin (page_url new_url) new_urls.add (new_full_url) 返回new_urls def _get_new_data(自我、page_url汤): “‘ 抽取有效数据 :param page_url:下载页面的URL :param汤: 返回:返回有效数据 “‘ data={} 数据的url=page_url title=soup.find(‘弟弟’,class_=lemmaWgt-lemmaTitle-title); (h2) 数据(“标题”)=title.get_text () 摘要=soup.find (" div " class_=發emma-summary”) #获取标签中包含的所有文版内容包括子孙中标签的内容,并将结果作为Unicode字符串返回 数据(“摘要”)=summary.get_text () 返回数据
爬虫调度器
class SpiderWork(对象): ,,,def __init__(自我): ,,,,,,,#初始化分布式进程中的工作节点的连接工作 ,,,,,,,#,实现第一步:使用BaseManager注册获取队列的方法名称 ,,,,,,,BaseManager.register (& # 39; get_task_queue& # 39;) ,,,,,,,BaseManager.register (& # 39; get_result_queue& # 39;) ,,,,,,,#,实现第二步:连接到服务器: ,,,,,,,server_addr =, & # 39; 127.0.0.1 # 39; ,,,,,,,印刷(& # 39;Connect 用server % s……& # 39;, %, server_addr) ,,,,,,,#,端口和验证口令注意保持与服务进程设置的完全一致: ,,,,,,,self.m =, BaseManager(地址=(server_addr, 8001), authkey=& # 39;百科# 39;) ,,,,,,,#,从网络连接: ,,,,,,,self.m.connect () null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null nullpython中爬虫节点的使用方法