使用selenium爬取腾讯热点新闻

     在爬取之前我一直都陷入了一个误区,我认为只用selenium就可以实现这个工作,事实上它确实是可以,只不过selenium是自动化测试工具,可以驱动浏览器(有界面,无界面)来执行特定的操作,可以模仿人的点击下拉等各种基本操作,对于js加密的信息的抓取非常有效。它更适用于动态和交互。所以在提取信息得时候结合bs4或者xpath更方便一点。经过大佬指点,这里强推xpath.
     ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200427094746986.png)

打开网址会发现页面默认加载10条信息,随着页面向下滚动,页面是自动加载的。
这里借用某大佬的思想:

  1. 调用 window.srollBy’执行页面滚动。
  2. 利用random对单次滚动距离、滚动时间进行选取,模拟人工操作。
import random
for i in range(20):
    pixel = random.randint(800,1000)
    driver.execute_script(f'window.scrollBy(0,{pixel})')
    time.sleep(random.random()+1)

完整代码如下:

import time
from selenium import webdriver
from lxml import etree

driver = webdriver.Chrome('D:\software\Annaconda3\chromedriver')
driver.get('https://news.qq.com/')

由于页面默认加载10条,这里实现页面滚动,动态加载。

import random
for i in range(20):
    pixel = random.randint(800,1000)
    driver.execute_script(f'window.scrollBy(0,{pixel})')
    time.sleep(random.random()+1)

html = driver.page_source

tree = etree.HTML(html)



infos = tree.xpath('//ul[@class="list"]/li/div[@class="detail"]/h3/a')
infolist = []

count = 0

for i,info in enumerate(infos):
    title = info.xpath('text()')[0]
    href = info.xpath('@href')[0]
    print(i+1,title,href)
    infolist.append([i+1,title,href])

结果如下:
使用selenium爬取腾讯热点新闻_第1张图片
存为csv文件

#保存

import pandas as pd
name = ['序号','新闻标题','新闻链接']
df = pd.DataFrame(columns=name, data=infolist)
df.to_csv('腾讯新闻热点.csv',index=False)

使用selenium爬取腾讯热点新闻_第2张图片

你可能感兴趣的:(使用selenium爬取腾讯热点新闻)