chrome 插件 抓取网页qq聊天记录(博客更新:selenium爬取腾讯新闻疫情数据续——按控件tag爬取)

优采云 发布时间: 2021-11-15 01:06

  chrome 插件 抓取网页qq聊天记录(博客更新:selenium爬取腾讯新闻疫情数据续——按控件tag爬取)

  博客更新:

  Selenium爬取腾讯新闻疫情数据续-通过控制标签爬取

  前言

  博客因故未获批,久久避之不及。神秘的操作...

  我已经写了两篇文章。两者都使用请求来抓取页面。之前腾讯提供的接口使用json解析内容,而定香园直接使用BeautifulSoup。

  requests+json抓取腾讯新闻飞燕实时数据,实现持续更新

  requests+bs4 抓取定香园飞燕实时数据

  但是在使用腾讯的界面之前,一方面腾讯一直在换界面,另一方面,它提供的界面也经常不更新数据。至于定香园的数据,总是不准确的(比如阿根廷这两天的数据是错的,但那几天可能正好不准确)。

  由于以上问题,我决定在腾讯新闻实时界面上折腾,直接爬取上面的数据。本篇博客将讲讲如何使用selenium直接抓取腾讯新闻实时页面的数据。

  硒制剂

  首先,安装 selenium、chrome 和 chromedriver。selenium的安装就是普通python库的安装。这里使用国产镜像加快安装过程:

  pip install selenium -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

  国内镜像安装参考博文:

  pip(国内镜像)快速安装Python库

  Windows下只需要安装chrome浏览器,然后从chromedriver.storage.googleapis.index.html下载对应版本的chromedriver即可。chrome版本可以通过以下命令查看:

  google-chrome --version

  下载后解压压缩包放到C:\Users\zhang\AppData\Local\Google\Chrome\Application(自己找自己的谷歌浏览器路径),然后把这个路径放到系统环境的Path多变的。能。

  如果是服务器,还需要安装chrome和chromedriver。Linux服务器可以下载上传到服务器,用yum安装,也可以直接用命令下载。最后,解压chromedriver后,记得输入命令(非Windows需要):

  chmod +x chromedriver

  服务器安装了chrome和chromedriver,可以自行搜索。

  探索腾讯新闻专页

  去选择海外数据。为什么腾讯新闻的页面不能像丁香园那样被抓取?我们来看看请求捕获了什么:

  import requests

url = "https://news.qq.com/zt2020/page/feiyan.htm#/global"

r = requests.get(url)

data = r.text

  

  我们可以发现requests爬下来的页面内容根本没有显示我们想要的数据,而是连接到了一个app.js页面。这就是不能用定香园法爬行的原因。

  硒探索

  让我们用 selenium.webdriver 试试:

  from selenium import webdriver

url = "https://news.qq.com/zt2020/page/feiyan.htm#/global"

executable_path = 'C:/Users/zhang/AppData/Local/Google/Chrome/Application/chromedriver'

dr = webdriver.Chrome(executable_path)

dr.get(url)

  这里的executable_path是之前的chromedriver的路径。这时候会自动打开一个浏览器页面,就是腾讯新闻的页面。如果我们不想弹出这个浏览器页面,我们可以通过

  webdriver.ChromeOptions() 来配置:

  chrome_options = webdriver.ChromeOptions()

chrome_options.add_argument('--no-sandbox')

chrome_options.add_argument('--disable-dev-shm-usage')

chrome_options.add_argument('--headless')

dr = webdriver.Chrome(chrome_options = chrome_options, executable_path = executable_path)

  这样就不会弹出浏览器页面了。

  页面内容探索

  我们来看腾讯新闻页面,查看页面源码,选择我们需要的地方:

  

  一路走来,这张表中的每个tbody都是一条数据。我们一路根据源码定位表:

  from selenium import webdriver

url = "https://news.qq.com/zt2020/page/feiyan.htm#/global"

executable_path = 'C:\\Users\\zhang\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver'

chrome_options = webdriver.ChromeOptions()

chrome_options.add_argument('--no-sandbox')

chrome_options.add_argument('--disable-dev-shm-usage')

chrome_options.add_argument('--headless')

dr = webdriver.Chrome(chrome_options = chrome_options, executable_path = executable_path)

dr.get(url)

main_view = dr.find_element_by_id('app')

table = main_view.find_element_by_xpath("//div/div[@class='globalWraper']/div[3]/div[@class='foreignListWraper']/div[@class='listWraper filterGray']/table")

tableList = table.text

  我们看到爬下来的数据,区域会自己形成一行,然后相关的数据就会成为一行。我们再处理一下:

  tableList = tableList.split('\n')

countryList = tableList[0::2]

dataList = tableList[1::2]

  这样,我们分别取了国家和数据:

  

  然后,我们可以直接用一个列表来放我们想要的数据:

  resultList = []

for i in range(1, len(countryList)):

place_dict = {}

place_dict['place'] = countryList[i]

temp = dataList[i].split(' ')

place_dict['confirmed_num'] = temp[1]

place_dict['cure_num'] = temp[2]

place_dict['die_num'] = temp[3]

resultList.append([place_dict['place'], place_dict['confirmed_num'],

place_dict['cure_num'], place_dict['die_num']])

  

  也可以直接转换成数据框:

  import pandas as pd

resultDf = pd.DataFrame(resultList, columns = ['place', 'confirmed_num', 'die_num', 'cure_num'])

  

  结束语

  至此,腾讯新闻和定香园的实时页面爬取已经实现了~关于腾讯的数据爬取,大家可以关注一下源码。腾讯一直在变。

  最后审核真的很烦……唉,想投诉的人很多,不能放在各个应该*敏*感*词*的地方(比如非法的*敏*感*词*平台,真的……) ...

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线