python中爬虫节点的使用方法

  介绍

这篇文章主要介绍了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   null

python中爬虫节点的使用方法