selenium爬取腾讯新闻feiyan页面实时数据

博客更新:

selenium爬取腾讯新闻疫情数据续——按控件tag爬取

前言

莫名其妙博客不给通过,搞了好久避开各种词。谜一样的操作···

前面已经写了两篇,都是用requests爬取页面,之前腾讯提供的接口用的json解析内容,丁香园则是直接用BeautifulSoup

requests+json爬取腾讯新闻feiyan实时数据并实现持续更新
requests+bs4爬取丁香园feiyan实时数据

但是之前用腾讯的接口,一方面腾讯老是换接口,另一方面提供的接口经常不更新数据。而丁香园的数据吧,老是不大准确(比如有两天阿根廷的数据都错了,但可能刚好只是那几天不准确吧)。

由于出现以上种种问题,我决定还是折腾腾讯新闻实时界面,直接爬取那上面的数据。这篇博客就说一下如何使用selenium直接爬取腾讯新闻实时页面的数据。

selenium准备

首先要装好seleniumchrome以及chromedriverselenium的安装就是正常的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(自行找下自己的google浏览器路径),再将这个路径放到系统环境变量的Path里面即可。

如果是服务器,同样需要安装chromechromedriver。Linux服务器可以下载好后传上服务器,用yum进行安装,也可以直接用命令下载。最后解压chromedriver后记得输入命令(非Windows才需要哦):

chmod +x chromedriver

服务器安装chromechromedriver可以自行搜索。

探索腾讯新闻页面

前往腾讯新闻页面,选海外数据。为什么腾讯新闻的页面不能跟丁香园那样爬取呢?我们来看下requests抓取下来的内容是什么:

import requests

url = "https://news.qq.com/zt2020/page/feiyan.htm#/global"
r = requests.get(url)
data = r.text

在这里插入图片描述
我们可以发现,requests爬下来的页面内容压根就没有出现我们要的数据,而是连接到一个app.js的页面。这就是为什么没法用丁香园的方法来爬取了。

selenium探索

我们使用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)

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

页面内容探索

我们接着看腾讯新闻页面,查看网页源码,选到我们需要的地方:
在这里插入图片描述
一路下来,这个table里的每一个tbody就是一条数据。我们根据源码一路定位到table的地方:

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]

这样子我们就把国家跟数据分别取了出来:
在这里插入图片描述

接着,我们就可以直接用一个list来放我们要的数据啦:

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']])

在这里插入图片描述
也可以直接转成dataframe:

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

在这里插入图片描述

结语

到这里,腾讯新闻跟丁香园的实时页面爬取就都实现啦~关于腾讯的数据爬取要注意看源码,腾讯老是改来改去的。
最后的最后,审核真的神烦···唉有很多想吐槽的,有这劲不能放到各种该查的(比如违法偷拍平台,真的是···)地方吗···

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值