与Scapy框架相关的内容在此不搬砖。中国官方文件足够详细和清晰。
Scrapy框架使用起来非常简单,按照教程一步一步来就可以了。抓取一些静态资源是没有问题的,但是现在大部分网站为了禁止爬虫,都会采取一些反抓取的策略。最典型的就是通过ajax动态渲染界面,以抓取图片为例。网页加载带有js的图片时,scrapy.request url得到的响应并没有暴露图片url,而是一个很大的js函数。要解决这个问题,可以结合使用Python Scr。

1元。爬行动态页面环境的准备
安装1.1元Scrapy Kramp-Karrenbauer Splash,终端直接运行。
pip安装刮溅
1.2元。安装Scrapy Kramp-Karrenbauer Splash服务
码头工人拉刮垃圾/飞溅
1.3元。启动splash服务容器并运行:
docker run -p 8050:8050报废/飞溅
如有疑问,请向https://github.com/scrapy-plugins/scrapy-splash,咨询位于Scrapy Kramp-Karrenbauer的splash项目地址
1.4元1.4.splash服务有什么用?尝试用浏览器访问http://localhost:8050,可以看到如下界面:
尝试在右边的输入框输入任意一个ajax动态网页,点击render me!过一会儿,你会看到页面返回splash渲染的结果。
冠军联赛。配置您的scrapy项目
在2.1元项目settings.py中添加以下配置:
SPLASH _ URL = ' http://localhost:8050 '
DOWNLOADER _ MIDDLEWARES = {
scrapy_splash。SplashcookiesMiddleware': 723,
scrapy_splash。'飞溅中间件':725,
scrapy . downloadermiddleware . httpcompression . httpcompressionmiddleware ':810,
}
SPIDER _ middleware = { ' scrapy _ splash。splashdepideargsmiddleware ':100,}
dupe filter _ CLASS = ' scrapy _ splash。' SplashAwareDupeFilter '
http cache _ STORAGE = ' scrapy _ splash。' SplashAwareFSCacheStorage '
修改scrapy。2.2元项目爬虫文件中对SplashRequest的请求,这样当Scrapy引擎访问url时,SplashRequest直接将请求发送给SRACpy Kramp-Karrenbauer splash服务器,SRACpy Kramp-Karrenbauer splash服务器成功访问Url并将渲染结果返回给scrapy Kramp-Karrenbauer引擎,代码如下:
脚本= " " "
主要功能
断言)
断言)
return { html = splash:html,}
目标
"""
类别示例:

定义开始请求:
对于self.start_urls中的url:
产生飞溅请求
定义解析:
及格
注意,这里的请求是通过执行lua脚本转发的。当然,也可以在要访问的url之外手动封装一层,这样splash服务就可以直接访问封装后的url。
2.2元的下一步是爬虫的具体业务。例如,如果您想抓取一个网站并将图片保存在本地,
首先,您需要在项目items.py文件中创建一个新的imagepipeline,例如:
从废品中导入废品。例外
从scrapy.pipelines.images导入DropItemfrom
导入图像Pipelineclass
我的图片管道:
定义媒体请求:
对于项目[' image_url ']中的image _ URL:
#注意一定要用scrapy。请求访问此处的图像url,但不是splash请求访问url,
#因为scrapy框架引擎本身无法解析SplashResponse,所以需要重写一些方法。
产生刺痒感。请求
defitem_completed:
image_paths = [x['path']表示正常,x表示结果正常]
如果不是图像路径:
提升DropItem
项目['图像路径'] =图像路径
退货项目
同样,在项目settings.py中配置与下载中间件相关的配置:
ITEM_PIPELINES = { '您的项目名称。pipelines . my images pipeline:300元
IMAGES_STORE = '你的项目保存图片的目录/'IMAGES_EXPIRES = 90元。
你也屈服于重写爬虫中的解析函数,及时把imageItem交给下载中间件,自动下载图像。代码如下:
定义解析:
list_imgs = response.xpath.extractlist _ imgs = response . XPath . extract
# xpath需要修改为你想从目标网站提取的内容,比如图片的url等。

iflist_imgs:iflist_imgs:
项目=图像项目
item['image_urls'] = list_imgsitem['image_urls'] = list_imgs
产量项目
好了,完成以上工作后,你就可以运行你的爬虫了,尽情的爬行网站里的各种小姐姐吧!


