python爬取动态页面

核心提示Scapy框架相关的内容,这里不在搬砖,官方给出的中文文档,已经足够详尽清晰。Scrapy框架上手非常简单,跟着教程一步步走就可以了,爬取一些静态资源是毫无问题的,但现如今,大部分网站为了封禁爬虫,都会采取一些防爬策略,最典型的是通过aja

与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

产量项目

好了,完成以上工作后,你就可以运行你的爬虫了,尽情的爬行网站里的各种小姐姐吧!

 
友情链接
鄂ICP备19019357号-22