2 min to read
基于selenium抓取一点资讯数据
说明
lxml库
/
:从当前节点选取直接子孙节点
//
:从当前节点选取直接子节点
@
:选取属性
[@attrib='value']
:选取给定属性且具有给定值的所有元素
text()
:获取节点中的文本
//label[contains(text(),self.users)]
:按节点文本值查找节点元素
selenium使用
driver.refresh()
:刷新页面
driver.execute_script("window.scrollBy(0, 800)")
:下拉滚动条,相对当前的坐标移动800像素
实操
chromedriver
下载对应chrome版本的chromedriver,解压后放入D:\chromedriver\
文件夹下。
代码
from selenium import webdriver
from selenium.webdriver.common import keys
from selenium.webdriver.common import by
import lxml.html
import time,os,csv
chromedriver = 'D:\chromedriver\chromedriver.exe'
os.environ["webdriver.chrome.driver"] = chromedriver
driver = webdriver.Chrome(chromedriver)
#打开一点资讯网页
driver.get('https://www.yidianzixun.com/channel/m1476422')
#因为这个网页不是响应式的,所以先最大化,才能加载出旁边的刷新按钮
driver.maximize_window()
#等待3秒
driver.implicitly_wait(3)
#根据class找到刷新按钮,点击刷新按钮,获取最新资讯
driver.find_element_by_css_selector(".item.refresh.icon.iconfont.icon-refresh.anim").click()
#执行多次页面下拉脚本
for i in range(0,6):
driver.execute_script("window.scrollBy(0,200)","")
time.sleep(3)
doc = lxml.html.fromstring(driver.page_source)
#文章标题
title = doc.xpath('//div[@class="doc-title"]/text()')
#作者
author = doc.xpath('//span[@class="source"]/text()')
#评论数
comment = doc.xpath('//span[@class="comment-count"]/text()')
#评论数
data = doc.xpath('//span[@class="source"]/text()')
#图片
#链接
link_temp = doc.xpath('//div[@class="channel-news channel-news-0"]/a/@href')
link=[]
for i in range(len(link_temp)):
link.append("https://www.yidianzixun.com"+link_temp[i])
#结果汇总
result = []
for i in range(len(title)):
dic = {'title':title[i],'author':author[i],'comment':comment[i],'link':link[i]}
result.append(dic)
#表头
headers = ['title','author','comment','link']
with open('f:\\yidianzixun.csv','w') as f:
f = csv.DictWriter(f,headers, delimiter=',', lineterminator='\n') #lineterminator='\n'解决输出空行的问题
f.writeheader()
f.writerows(result)
print('ok')
参考资料
[1]. python3解析库lxml
Comments