网页抓取qq(网页数据由JS生成,API借口地址随机变换,时间不等人)

优采云 发布时间: 2022-04-01 09:35

  网页抓取qq(网页数据由JS生成,API借口地址随机变换,时间不等人)

  我们之前接触到的是使用requests+BeautifulSoup的组合来请求和解析静态网页。如果内容是JS生成的,还介绍了如何通过寻找API借口来获取数据。

  但是有时候,网页数据是JS生成的,找不到API借口,或者API地址随意更改,时间不等人。然后只使用 Selenium。

  一、硒介绍

  Selenium 是用于 Web 应用程序的功能自动化测试工具。 Selenium 直接在浏览器中运行,就像真正的用户一样。

  由于这种性质,Selenium 也是一个强大的 Web 数据工具采集,它可以让浏览器自动加载页面,获取所需的数据,甚至是页面的截图,或者判断某些项目网站 动作是否发生。

  Selenium 没有自己的浏览器,需要配合第三方浏览器使用。支持的浏览器有Chrome、Firefox、IE、Phantomjs等。

  如果使用 Chrome、FireFox 或 IE,我们可以看到一个浏览器窗口打开,打开 网站,并执行代码中的操作。

  不过让程序在后台运行更符合我们爬虫的气质,所以我更多的使用Phantomjs作为浏览器载体。这篇文章文章我也介绍一下Phantomjs

  Phantomjs 是一个“无头”浏览器,即没有界面的浏览器,但功能与普通浏览器相同。

  二、在Python中使用Selenium获取QQ空间的朋友说说

  之前已经使用pip安装过Selenium,可以直接在代码中导入。

  我们通过一个实际的例子来简单解释一下Selenium+Phantomjs的使用——获取QQ空间好友的谈话信息。

  我们需要爬取的页面是这样的:

  

  朋友在QQ空间中提到的链接是:{朋友QQ号}/311

  我们会记录他评论的时间和内容。

  还是先上传代码:

  from

  部分获取的数据截图如下:

  

  接下来我们通过讲解代码来了解一下Selenium的使用

  三、代码分析

  1.像往常一样,导入所需的模块:

  from

  2.使用 Selenium 的 webdriver 实例化一个浏览器对象,这里使用 Phantomjs:

  driver = webdriver.PhantomJS(executable_path="D:phantomjs.exe")

  3.最大化 Phantomjs 窗口:

  driver

  4.主要功能部分

  使用get()方法打开要爬取的URL:

  driver.get('http://user.qzone.qq.com/{}/311'.format(qq))

  等待5秒后,判断页面是否需要登录,判断页面是否有对应的DIV id:

  try

  如果页面上有登录DIV,模拟登录:

  driver

  接下来判断好友空间是否设置了权限,通过判断是否有元素ID:QM_OwnerInfo_Icon

  try

  如果您有权访问讨论页,请定位元素和数据并解析:

  if

  除了在Selenium中解析数据,我们还可以将当前页面保存为源码,然后使用BeautifulSoup进行解析:

  pages = driver.page_source

soup = BeautifulSoup(pages,'lxml')

  最后,让我们尝试使用 get_cookies() 获取 cookie:

  cookie

  另外介绍Selenium的两种常用方法:

  保存截图:

  driver.save_screenshot('保存的文件路径及文件名')

  执行JS脚本:

  driver

  关于Selenium更详细的操作和使用,推荐一本书《selenium webdriver(python)第三版》,可以在线搜索。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线