chrome 插件 抓取网页qq聊天记录(博客更新:selenium爬取腾讯新闻疫情数据续——按控件tag爬取)
优采云 发布时间: 2021-11-15 01:06chrome 插件 抓取网页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'])
结束语
至此,腾讯新闻和定香园的实时页面爬取已经实现了~关于腾讯的数据爬取,大家可以关注一下源码。腾讯一直在变。
最后审核真的很烦……唉,想投诉的人很多,不能放在各个应该*敏*感*词*的地方(比如非法的*敏*感*词*平台,真的……) ...