前面更新过几篇爬虫的博客,详见以下链接:
requests+json爬取腾讯新闻feiyan实时数据并实现持续更新
requests+bs4爬取丁香园feiyan实时数据
selenium爬取腾讯新闻feiyan页面实时数据
这里主要是,之前面试的时候,当时信号不好没听清,可能当时面试官想问我怎么具体爬到表格里的每个数据。
像之前那篇博客里写的,我当时是直接将整个表格爬下来,发现爬下来的结构是有规律的,所以就直接对表格进行拆分。但如果想要爬取表格里的每个数据,则要用到.find_elements_by_tag_name()
。下面就来说说具体怎么操作。
前面的介绍不详细说了,具体可以看之前的博客,我们先来看网页里表格的控件,直接定位到表格部分:
我们可以看到,在这里,列名以及国家名的tag都是th
,而具体的数据是td
,接下来就可以直接进行解析了:
import pandas as pd
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
executable_path = 'C:\\Program Files (x86)\\Google\Chrome\\Application\\chromedriver'
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)
url = "https://news.qq.com/zt2020/page/feiyan.htm#/global"
dr.get(url)
main_view = dr.find_element_by_id('app')
try:
table = main_view.find_element_by_xpath("//div/div[@class='globalWraper']/div[3]/div[@class='foreignListWraper']/div[@class='listWraper']/table")
except:
table = main_view.find_element_by_xpath("//div/div[@class='globalWraper']/div[3]/div[@class='foreignListWraper']/div[@class='listWraper filterGray']/table")
thLine = table.find_elements_by_tag_name("th")
thData = []
for th in thLine:
thData.append(th.text)
tdLine = table.find_elements_by_tag_name("td")
tdData = []
for td in tdLine:
tdData.append(td.text)
这里我们定位table的时候用到了try,是因为之前那里改了一次名字哈哈哈。拿到tdLine
跟tbLine
之后,我们用列表先存储出来,这里需要先看下爬下来是什么。先看下th
爬下来的东西:
前面五个是列名,这里想要存出列名也可以,后面自己命名也可以,第六个是不需要用到的,第七个之后都是国家名:
headLine = thData[:5]
countryList = thData[6:]
再来看td
爬下来的数据:
每5个为一个国家的数据,我们只需要前四个数据:
addCase = tdData[0::5]
allCase = tdData[1::5]
cure = tdData[2::5]
dead = tdData[3::5]
最后,将国家跟数据拼接在一起:
globalDF = pd.DataFrame({'country': countryList,
'addCase': addCase,
'totalCase': allCase,
'totalCure': cure,
'totalDeath': dead})
其他的实时更新csv跟之前的操作一样,有兴趣可以看下之前的博客。以上就是根据控件tag
爬取数据的内容啦~ 继续冲鸭~