4.8编写spider完成抓取过程
获取文章列表页中的文章url并交给scrapy下载,并随之进行解析
获取下一页的url并交给scrapy进行下载,下载后交给parse解析
爬取单个url
爬取多个url
爬虫步骤
获取需要爬取的url列表
下载url列表中的每一个url,并从下载结果中解析出我们感兴趣的内容,将非结构的数据转化为结构性的数据
将解析结果存取
import scrapy
from urllib import parse
from scrapy import Requestfor 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?