您的位置:軟件測試 > 開源軟件測試 > 開源功能測試工具 > Selenium
使用Selenium簡單收集知乎的話題數(shù)據(jù)
作者:鄧旭東 發(fā)布時間:[ 2017/3/21 11:00:18 ] 推薦標簽:功能測試 Selenium Python

  當你在知乎上搜索一個話題,如王寶強的時候,搜索結(jié)果頁面的底部有個“更多”按鈕,如下圖

  遇到這個坑爹了,因為你發(fā)現(xiàn)點擊“更多”按鈕后,網(wǎng)址部分沒有變化,但頁面卻加載了新的數(shù)據(jù)。怎么辦????
  沒法按照之前的 有規(guī)律的網(wǎng)址&page=number ,通過for循環(huán)依次遍歷網(wǎng)頁。
  在這里我不講抓包,分析請求包。咱們用生硬的方法,破解這問題。在這里我使用了selenium庫,并且要安裝一個火狐瀏覽器(firefox36)。輕松破解該問題。
  selenium教程,建議大家網(wǎng)上買《selenium 2自動化測試實戰(zhàn)-基于python語言》 這本書閱讀相關知識。當然也可以根據(jù)本代碼,在網(wǎng)上查相關selenium的知識。
import re
import csv
import time
import urllib.parse as parse
from selenium import webdriver
from bs4 import BeautifulSoup
# keyword話題名 ,filename保存數(shù)據(jù)的文件名,page_num收集多少頁
def topic_title_spider(keyword='王寶強', filename = 'wangbaoqiang', page_num = 10):
start = time.time()
# 建立一個收集數(shù)據(jù)的csv文件
csvFile = open(r'E:\%s.csv'% filename, 'a+', newline='')
writer = csv.writer(csvFile)
writer.writerow(('title', 'review_num'))
# 將關鍵詞轉(zhuǎn)換為十六進制格式,填入到鏈接中
kw = parse.quote(keyword)
driver = webdriver.Firefox()
driver.get('https://www.zhihu.com/search?type=content&q=%s' % kw)
# 正則表達式,用來匹配標題,評論數(shù)
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>')
# 先循環(huán)點擊頁面底部“更多”,加載盡可能多的頁面數(shù)據(jù)
for i in range(1, page_num, 1):
driver.find_element_by_link_text("更多").click()
duration = time.time()-start
print('%s小爬蟲 已經(jīng)跑到 第%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()
  代碼在我這里運行成功,不過在你那里需要注意拷貝代碼后,要調(diào)整代碼,因為有的代碼一行太長了,被知乎調(diào)整到第二行了,這樣可能會出錯。
  該方法缺點是運行速度慢,不過對于小數(shù)據(jù)需求的小白們來說,還是可以接受的。

軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd