python request 获取页面跳转_Python+Scrapy+Selenium数据采集!超级详细!

我是好人,一个大大的良民。

好与坏,关键在于使用者噢!

Scrapy 是一个常用的数据采集工具;

Selenium 是一个浏览器自动化测试工具;

结合 Scrapy 对数据的处理机制和 Selenium 模拟真实浏览器去获取数据(如:自动化登录,自动化翻页等)。可以更好的完成采集。

About Scrapy

Scrapy 是开发者在网络上用于常用的数据采集工具之一,对于通过 API 获取数据我们已经司空见惯了,但是有些 WebSite 还是会为了“性能或者安全”等原因,通过某些技术手段特意避开 API 传递数据(比如页面静态化,一次性token等)。因此为了能够采集到这些数据,我们可以通过分析站点和标签结构,然后通过借助 Scrapy 采集数据。

简单的介绍了 Scrapy 框架的作用了,那具体如何帮助我们采集数据呢?一起看看 Scrapy 的结构吧:

0064bc9b43542eee61c54e7b501575bb.png

Scrapy 的数据流由 Scrapy Engine 控制,流程如下:

  1. Engine 初始化,并从 Spider 获取请求。
  2. 将 Request 入调度器。
  3. 调度器将 Request 逐一发送给 Scrapy Engine 消费。
  4. Scrapy Engine 通过下载器中间件将请求发送给下载器。
  5. 下载器将用 Request 获取的页面作为 Response 结果返回给 Scrapy Engine 。
  6. Scrapy Engine 从 Downloader 接收 Response 并发送给 Spider 处理(Spider Middleware)。
  7. Spider 处理 Response 并向 Scrapy Engine 返回 Item 。
  8. Scrapy Engine 将处理好的 Item 发送给 Item Pipeline ,同时将已处理的信号一同发送给调度器( Scheduler ),请求下一个采集请求。

重复以上步骤处理采集请求,直至 Scheduler 没有新的 Request 。

Scrapy 安装教程: https://doc.scrapy.org/en/lat...

Scrapy 项目创建

今天就以 清博大数据 作为案例样本,完成自动化登录,自动化搜索以及数据采集。

在文件根目录执行:

scrapy startproject qingbo

然后进入目录 qingbo/ 下执行:

scrapy genspider crawl gsdata.cn

得出以下目录:

qingbo/    scrapy.cfg            # deploy configuration file    qingbo/             # project's Python module, you'll import your code from here        __init__.py        items.py          # project items definition file        middlewares.py    # 浏览器的启动和访问方式在这操作        pipelines.py      # 处理好后的数据在这做最后处理        settings.py       # project settings file        spiders/          # a directory where you'll later put your spiders            __init__.py            crawl.py      # 访问的连接和爬取后的数据在这里处理

其实如何在 Scrapy 结合 Selenium 最关键就是在 middlewares.py

具体如何封装可以参考下这里: https://www.osgeo.cn/scrapy/t...

About Selenium

Selenium 是一款开源的自动化测试框架,通过不同的浏览器和平台对Web应用进行校验,目前支持多个语言调用,如:Python、Java、PHP等。

Selenium 测试直接在浏览器中运行,就像真实用户所做的一样,所以利用这点,可以更好的进行数据采集。

Python Selenium安装教程: https://selenium-python-zh.re...

Selenium 案例

如果没有登录态直接访问 清博大数据的腾讯视频

不出意外的话,会跳转到登录页需要登录。上面已经提到了 Selenium 的环境安装,这里就直接上代码啦:

站点打开
options = Options()options.headless = Falsedriver = webdriver.Firefox(options=options)driver.get('https://u.gsdata.cn/member/login')driver.implicitly_wait(10) # 页面打开需要加载时间,所以建议加个静默等待
登录操作

可以发现两个tab,分别为:二维码登录、清博帐号登录。

页面已经打开了,如何到清博帐号登录的tab呢?

这里我们需要了解一下 Xpath (XML Path Language),它是一种用来确定XML文档中某部分位置的语言。

简单的说,就是我们可以用Xpath对“清博帐号登录”这个Tab进行定位

59f8e3eef977f2db8116cb89ef339e00.png
driver.find_element_by_xpath(".//div[@class='loginModal-content']/div/a[2]").click()

然后定位到账号密码框,填入信息:

driver.find_element_by_xpath(".//input[@name='username']").send_keys("username")driver.find_element_by_xpath(".//input[@name='password']").send_keys("password")

最后点击登录按钮:

driver.find_element_by_xpath(".//div/button[@class='loginform-btn']").click()driver.implicitly_wait(5)
e329d64189b436928cff951b280dd29e.png

登录成功!~

查询操作
driver.get('http://www.gsdata.cn/')driver.find_element_by_xpath(".//input[@id='search_input']").send_keys("腾讯视频")driver.find_element_by_xpath(".//button[@class='btn no btn-default fl search_wx']").click()driver.implicitly_wait(5)
fc7f60fbc00d3dbc72f0d2cbf79f73ce.png

在搜索后得出以下结果:

f6a1ab119d66bb96319f18a6a5febba5.png

通过 Xpath 定位到腾讯视频的 a 标签,然后点击进入腾讯视频的数据内容页:

driver.find_element_by_xpath(    ".//ul[@class='imgword-list']/li[1]/div[@class='img-word']/div[@class='word']/h1/a").click()driver.implicitly_wait(5)
内容页
291fdb90dfcb1207906a9558b5671bf1.png

到了这里,惊不惊喜?现在就可以通过 Xpath 定位并获取需要的内容进行加工啦,就不细说了。

关闭操作
driver.close()

数据获取完,如果没有其他操作了,就可以把浏览器关了。

总结

本章介绍了 Scrapy 和 Selenium 的基本概念和大致的使用方法,总的来说,可以帮助我们在解决一些问题的时候提供新的方案和思路。

s私信小编01 领取完整项目代码~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值