您的位置:软件测试 > 开源软件测试 > 开源功能测试工具 > Selenium
使用Selenium简单收集知乎的话题数据
作者:邓旭东 发布时间:[ 2017/3/21 11:00:18 ] 推荐标签:功能测试 Selenium Python

  当你在知乎上搜索一个话题,如王宝强的时候,搜索结果页面的底部有个“更多”按钮,如下图

  遇到这个坑爹了,因为你发现点击“更多”按钮后,网址部分没有变化,但页面却加载了新的数据。怎么办????
  没法按照之前的 有规律的网址&page=number ,通过for循环依次遍历网页。
  在这里我不讲抓包,分析请求包。咱们用生硬的方法,破解这问题。在这里我使用了selenium库,并且要安装一个火狐浏览器(firefox36)。轻松破解该问题。
  selenium教程,建议大家网上买《selenium 2自动化测试实战-基于python语言》 这本书阅读相关知识。当然也可以根据本代码,在网上查相关selenium的知识。
import re
import csv
import time
import urllib.parse as parse
from selenium import webdriver
from bs4 import BeautifulSoup
# keyword话题名 ,filename保存数据的文件名,page_num收集多少页
def topic_title_spider(keyword='王宝强', filename = 'wangbaoqiang', page_num = 10):
start = time.time()
# 建立一个收集数据的csv文件
csvFile = open(r'E:\%s.csv'% filename, 'a+', newline='')
writer = csv.writer(csvFile)
writer.writerow(('title', 'review_num'))
# 将关键词转换为十六进制格式,填入到链接中
kw = parse.quote(keyword)
driver = webdriver.Firefox()
driver.get('https://www.zhihu.com/search?type=content&q=%s' % kw)
# 正则表达式,用来匹配标题,评论数
reg_title = re.compile(r'<a class="js-title-link" href=.*?" target="_blank">(.*?)</a>')
reg_li = re.compile(r'item clearfix.*?')
reg_num = re.compile(r'<a class="zm-item-vote-count hidden-expanded js-expand js-vote-count" data-bind-votecount="">(.*?)</a>')
# 先循环点击页面底部“更多”,加载尽可能多的页面数据
for i in range(1, page_num, 1):
driver.find_element_by_link_text("更多").click()
duration = time.time()-start
print('%s小爬虫 已经跑到 第%d页 了,运行时间%.2f秒,好累啊'%(keyword, i, duration))
time.sleep(5)
soup = BeautifulSoup(driver.page_source, 'lxml')
li_s = soup.find_all('li', {'class': reg_li})
for li in li_s:
li = str(li)
try:
title = re.findall(reg_title, li)[0]
title = title.replace('<em>', '')
title = title.replace('</em>', '')
review_num = re.findall(reg_num, li)[0]
except:
continue
writer.writerow((title, review_num))
print(title, review_num)
csvFile.close()
driver.quit()
  代码在我这里运行成功,不过在你那里需要注意拷贝代码后,要调整代码,因为有的代码一行太长了,被知乎调整到第二行了,这样可能会出错。
  该方法缺点是运行速度慢,不过对于小数据需求的小白们来说,还是可以接受的。

软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd