9.爬虫:scrapy入门(上)

本章节以博客园-新闻的爬取,来讲解scrapy的入门使用,分成上中下三篇

一.scrapy安装

pip安装的时候是从国外的服务器下载,国内有一个非常常用的镜像,可以提高下载速度

pip install -i https://pypi.douban.com/simple scrapy

有些windows环境下安装scrapy会出错,安装出错则按下面的方式处理

https://www.lfd.uci.edu/~gohlke/pythonlibs/

这个网址可以直接下载会安装出错的包,安装scrapy需要下载下面4个,下载时需要选对应解释器的版本

lxml twisted pywin32 scrapy 进入到下载目录下,按照以下方式安装,如果lxml等包有其依赖的包,也会通过镜像自动下载安装

9.爬虫:scrapy入门(上)

9.爬虫:scrapy入门(上)

二.使用scrapy创建一个项目

命令行输入:

scrapy startproject ArticleSpider

9.爬虫:scrapy入门(上)
9.爬虫:scrapy入门(上)

大家先不要着急了解每个文件的作用,后期会介绍到,命令行输入:

scrapy genspider cnblogs news.cnblogs.com

scrapy genspider 爬虫名称 抓取的网址

9.爬虫:scrapy入门(上)

爬虫隶属于项目,一个项目下可以有多个爬虫,这就类似于Django项目和其下app的关系。

三.调试代码

scrapy启动

通过命令行启动的爬虫程序,无法调试

scrapy crawl 爬虫名 带运行日志

scrapy crawl 爬虫名 --nolog 不带运行日志

crawl的英语翻译:爬行

在项目的目录下新建一个main.py(名字自取)内容如下,然后就可以鼠标右键debug这个爬虫

<span class="hljs-keyword">from</span>&#xA0;scrapy.cmdline&#xA0;<span class="hljs-keyword">import</span>&#xA0;execute<br><span class="hljs-keyword">import</span>&#xA0;sys<br><span class="hljs-keyword">import</span>&#xA0;os<br><br>sys.path.append(os.path.dirname(os.path.abspath(__file__)))<br>execute([<span class="hljs-string">"scrapy"</span>,<span class="hljs-string">"crawl"</span>,<span class="hljs-string">"cnblogs"</span>])

四.重点:response

当运行main.py,进入parse方法后, start_url里面的网址已经是被爬取下来的.

9.爬虫:scrapy入门(上)

response对象可以使用xpath,css选择器来提取元素

title_list&#xA0;=&#xA0;response.css(<span class="hljs-string">'.link-title'</span>)<br>title_list&#xA0;=&#xA0;response.xpath(<span class="hljs-string">'//a[contains(@class,"link-title")]'</span>)

xpath/css可以看这篇

五. 重点:parse()方法

parse()方法的 使命是用来解析起始网址(start_url)中的url,并把这些url交给scrapy去下载;同时,解析下一页的url,交给scrapy去下载

这样,每一页的url,以及每一页中具体内容的url都被一层一层提取出来,交给scrapy下载了.

<span class="hljs-keyword">import</span>&#xA0;scrapy<br><span class="hljs-keyword">from</span>&#xA0;scrapy&#xA0;<span class="hljs-keyword">import</span>&#xA0;Request<br><span class="hljs-keyword">from</span>&#xA0;urllib&#xA0;<span class="hljs-keyword">import</span>&#xA0;parse<br><br><br><span class="hljs-class"><span class="hljs-keyword">class</span>&#xA0;<span class="hljs-title">CnblogsSpider</span><span class="hljs-params">(scrapy.Spider)</span>:</span><br>&#xA0;&#xA0;&#xA0;&#xA0;name&#xA0;=&#xA0;<span class="hljs-string">'cnblogs'</span><br>&#xA0;&#xA0;&#xA0;&#xA0;allowed_domains&#xA0;=&#xA0;[<span class="hljs-string">'news.cnblogs.com'</span>]<br>&#xA0;&#xA0;&#xA0;&#xA0;start_urls&#xA0;=&#xA0;[<span class="hljs-string">'http://news.cnblogs.com/'</span>]<br><br>&#xA0;&#xA0;&#xA0;&#xA0;<span class="hljs-function"><span class="hljs-keyword">def</span>&#xA0;<span class="hljs-title">parse</span><span class="hljs-params">(self,&#xA0;response)</span>:</span><br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span class="hljs-string">"""<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;1.&#x83B7;&#x53D6;&#x65B0;&#x95FB;&#x5217;&#x8868;&#x9875;&#x4E2D;&#x7684;&#x65B0;&#x95FB;url&#x5E76;&#x4EA4;&#x7ED9;scrapy&#x8FDB;&#x884C;&#x4E0B;&#x8F7D;&#x540E;&#x8C03;&#x7528;&#x76F8;&#x5E94;&#x7684;&#x89E3;&#x6790;&#x65B9;&#x6CD5;<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;2.&#x83B7;&#x53D6;&#x4E0B;&#x4E00;&#x9875;&#x7684;url&#x4EA4;&#x7ED9;scrapy&#x8FDB;&#x884C;&#x4E0B;&#x8F7D;,&#x7136;&#x540E;&#x4EA4;&#x7ED9;parse()&#x65B9;&#x6CD5;&#x8FDB;&#x884C;&#x63D0;&#x53D6;&#x65B0;&#x95FB;url&#x6765;&#x4E0B;&#x8F7D;<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;"""</span><br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;post_nodes&#xA0;=&#xA0;response.css(<span class="hljs-string">"#news_list&#xA0;.news_block"</span>)<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span class="hljs-keyword">for</span>&#xA0;post_node&#xA0;<span class="hljs-keyword">in</span>&#xA0;post_nodes:<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;image_url&#xA0;=&#xA0;post_node.css(<span class="hljs-string">"div.entry_summary&#xA0;img::attr(src)"</span>).extract_first(<span class="hljs-string">""</span>)<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;post_url&#xA0;=&#xA0;post_node.css(<span class="hljs-string">"div.content&#xA0;h2&#xA0;a::attr(href)"</span>).extract_first(<span class="hljs-string">""</span>)&#xA0;&#xA0;<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span class="hljs-keyword">yield</span>&#xA0;Request(url=parse.urljoin(response.url,post_url),&#xA0;&#xA0;<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;meta={<span class="hljs-string">"front_image_url"</span>:image_url},&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;callback=self.parse_detail)&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<br><br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;next_url&#xA0;=&#xA0;response.xpath(<span class="hljs-string">'//div[@class="pager"]//a[contains(text(),"Next&#xA0;>")]/@href'</span>).extract_first(<span class="hljs-string">""</span>)<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span class="hljs-keyword">yield</span>&#xA0;Request(url=parse.urljoin(response.url,next_url),callback=self.parse)<br><br><br><br>&#xA0;&#xA0;&#xA0;&#xA0;<span class="hljs-function"><span class="hljs-keyword">def</span>&#xA0;<span class="hljs-title">parse_detail</span><span class="hljs-params">(self,response)</span>:</span>&#xA0;&#xA0;<br>&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;&#xA0;<span class="hljs-keyword">pass</span>

下一节:介绍解析详情页

Original: https://blog.csdn.net/agdzxzfdyw/article/details/126785034
Author: 奇巧小软件
Title: 9.爬虫:scrapy入门(上)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/791779/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球