4.8编写spider完成抓取过程

获取文章列表页中的文章url并交给scrapy下载,并随之进行解析

获取下一页的url并交给scrapy进行下载,下载后交给parse解析

爬取单个url

爬取多个url

爬虫步骤

获取需要爬取的url列表

下载url列表中的每一个url,并从下载结果中解析出我们感兴趣的内容,将非结构的数据转化为结构性的数据

将解析结果存取

import scrapy
from urllib import parse
from scrapy import Request
for post_url in post_urls:
    yield Request(url=parse.urljoin(response.url, post_url), callback=self.parseDetail)

解析:

Request():创建一个请求(包含需要下载的url,网页下载下来后的回调)

yield:将Reques()构建好的请求进行下载

parse.urljoin(response.url,post_url):当post_url为相对路径(如/china.html)时,可通过parse.urljoin( )拼接出完整url(http://hello.com/hello/china.html),若post_url为完整url,则不再拼接url

callback=self.parseDetail:当url下载完成后,scapy将调用函数名为parseDetail的函数解析下载结果

完整内容

爬取类型不同的多个url

从response中获取post_url和image_url

定义结构化数据

ArticleSpider/items.py

提示:scrapy.Field()为数据类型,支持元组、字符串、等

使用item

[image_url]表示传递的为列表

调用yield article_item将把封装好的article_item数据传递到pipelines.py中的item中

配置item pipelines

ArticleSpider/settings.py

提示:300为pipeline执行顺序,但有多个pipeline时及其有用,数值越小,越先执行

下载图片

配置item pipelines

提示:scrapy.pipelines.images.ImagesPipeline为scrapy内置的pipeline,除ImagePipeline外,scrapy中还内置了FilesPipeline、MediaPipeline,可在scrapy的源码scrapy.pipelines包下查看

需求

获取图片的地址,填充到item的front_image_path字段中

自定义图片pipeline

ArticleSpider/pipelines.py

提示:在ImagePipeline的基础上自定义我们的pipeline ,关于ImagePipeline细节请见解析ImagePipeline

注意:自定义的Pipeline需要将item返回,传递给下一个pipeline处理

注册pipeline

ArticleSpider/settings.py

自定义工具类

python2和python3的区别

python3中所有的字符都采用了unicode

Last updated

Was this helpful?