一、代碼撰寫目的
閑來(lái)無(wú)事想了解王者榮耀某個(gè)英雄最近的風(fēng)評(píng),例如是版本之子嗎or出裝怎么搭配or大家對(duì)策劃這次改動(dòng)有何看法,發(fā)現(xiàn)微博超話這方面的內(nèi)容非常多,于是想把超話內(nèi)容爬取下來(lái)做進(jìn)一步數(shù)據(jù)分析。溫馨提示 本代碼可以適用于任何微博超話內(nèi)容的爬取,只需修改url即可。
二、網(wǎng)頁(yè)結(jié)構(gòu)
可以看到超話一打開(kāi),網(wǎng)頁(yè)是如下布局,一篇帖子大概包含如下一些信息:用戶id、發(fā)布時(shí)間、來(lái)自xxx超話、帖子正文內(nèi)容以及收藏、轉(zhuǎn)發(fā)、評(píng)論、點(diǎn)贊數(shù)量。
再往下翻會(huì)發(fā)現(xiàn),通常無(wú)法完整加載出來(lái)一整夜,會(huì)下翻會(huì)觸發(fā)加載,所以說(shuō)這是一個(gè)動(dòng)態(tài)網(wǎng)頁(yè)
想要批量爬取上百頁(yè)超話內(nèi)容,我們不僅要克服動(dòng)態(tài)加載還要實(shí)現(xiàn)自動(dòng)翻頁(yè)
三、代碼主體
話不多說(shuō),上菜
版本一定要注意,selenium的版本會(huì)影響后面代碼的編寫
import time
from bs4 import BeautifulSoup #4.10.0
from selenium import webdriver #3.141.0
from xlrd import open_workbook
from xlutils.copy import copy
import eventlet#導(dǎo)入eventlet這個(gè)模塊
配置webdriver,webdriver的路徑根據(jù)自己實(shí)際進(jìn)行配置,一定要下載和自己電腦谷歌瀏覽器版本相匹配的的webdriver否則會(huì)出現(xiàn)錯(cuò)誤,怎么查看自己谷歌瀏覽器版本可以自行百度,Chromewebdriver下載鏈接也可以自行百度,網(wǎng)上一大堆,下載完成之后解壓出來(lái)exe放到自己的項(xiàng)目路徑下就可以。
這里的base_url可以根據(jù)自己爬取的超話進(jìn)行修改,baseurl是用于后面翻頁(yè)的,所以u(píng)rl最后是page=而不是page=xx(某一具體數(shù)字)
#調(diào)用selenium工具
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])
driver = webdriver.Chrome(executable_path=r"chromedriver.exe", options=options)
base_url = "https://s.weibo.com/weibo?q=%E7%8E%8B%E8%80%85%E8%8D%A3%E8%80%80%E8%B6%85%E8%AF%9D%E4%BC%A0%E7%BB%9F%E6%96%87%E5%8C%96&page="
下面這段代碼用于登錄微博(不登錄的話無(wú)法批量爬?。?,其中cookies需要自己配置(登錄自己的微博然后復(fù)制自己的cookies),cookies如何獲取可以百度(真的很多教學(xué),這里就不展開(kāi)篇幅說(shuō)了)
driver.get("https://weibo.com/p/100808ccb61d96c8f867d4f6c412e95c4f173a/super_index?current_page=3&since_id=4878245637659820&page=2#1678548112338")
driver.delete_all_cookies()
cookies ={}
for cookie in cookies:
cookie_dict = {
'domain': '.weibo.com',
'name': cookie.get('name'),
'value': cookie.get('value'),
"expires": cookie.get('value'),
'path': '/',
'httpOnly': False,
'HostOnly': False,
'Secure': False}
driver.add_cookie(cookie_dict)
driver.refresh()
如果實(shí)在不會(huì)配置,可以采用下面這段代碼,即直接暫停一分鐘,自己手動(dòng)登錄一下
driver.get("https://weibo.com/p/100808ccb61d96c8f867d4f6c412e95c4f173a/super_index?current_page=3&since_id=4878245637659820&page=2#1678548112338")
driver.delete_all_cookies()
time.sleep(60)
下面這段代碼用于解決動(dòng)態(tài)加載,即一直自動(dòng)下滑直到觸底
driver.get(url)
time.sleep(5)
eventlet.monkey_patch() # 必須加這條代碼
with eventlet.Timeout(10, False): # 設(shè)置超時(shí)時(shí)間為20秒
while True:
# 循環(huán)將滾動(dòng)條下拉
driver.execute_script("window.scrollBy(0,1000)")
# sleep一下讓滾動(dòng)條反應(yīng)一下
time.sleep(0.05)
# 獲取當(dāng)前滾動(dòng)條距離頂部的距離
check_height = driver.execute_script(
"return document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;")
# 如果兩者相等說(shuō)明到底了
if check_height >9000:
break
再往下的代碼都是用于定位元素,爬取內(nèi)容的,真正的難題已經(jīng)都被解決了,因?yàn)橛^察到有的帖子內(nèi)容比較長(zhǎng),需要點(diǎn)擊展開(kāi)才能爬取完整內(nèi)容,因此自動(dòng)定位頁(yè)面中所有展開(kāi)字樣并自動(dòng)點(diǎn)擊再進(jìn)行帖子正文抓取
elements = driver.find_elements_by_css_selector(
"div.content p.txt a")
for i in elements:
if "展開(kāi)" in i.text:
driver.execute_script("arguments[0].click()",i)
保存數(shù)據(jù)
r_xls = open_workbook(r"帖子內(nèi)容.xlsx") # 讀取excel文件
row = r_xls.sheets()[0].nrows # 獲取已有的行數(shù)
excel = copy(r_xls) # 將xlrd的對(duì)象轉(zhuǎn)化為xlwt的對(duì)象
worksheet = excel.get_sheet(0) # 獲取要操作的sheet
# 對(duì)excel表追加一行內(nèi)容
for i in range(len(chuantong)):
worksheet.write(row, 0, chuantong[i]) # 括號(hào)內(nèi)分別為行數(shù)、列數(shù)、內(nèi)容
row += 1
excel.save(r"帖子內(nèi)容.xlsx") # 保存并覆蓋文件
四、注意事項(xiàng)(完整的代碼和數(shù)據(jù)在公主號(hào)和Github)
大家白嫖代碼的時(shí)候一定要注意我標(biāo)明的三方庫(kù)版本,版本不對(duì)很有可能會(huì)出錯(cuò),此外最后保存數(shù)據(jù)的方法有很多大家可以自行挑選更改。
最重要的一點(diǎn),如果大家覺(jué)得有用跪求大家給我一個(gè)關(guān)注和點(diǎn)贊,有不懂的問(wèn)題可以私信或者留言,歡迎大家關(guān)注我的公主號(hào),上面有更多更詳盡的代碼,喜歡白嫖的有福了。
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-854048.html
GitHub - Maekfei/Spider-projects: 爬蟲實(shí)戰(zhàn),集合了數(shù)十個(gè)爬蟲實(shí)戰(zhàn)代碼,全都親測(cè)可用,借鑒麻煩點(diǎn)個(gè)star謝謝 同時(shí)歡迎訪問(wèn)我的github主頁(yè),copy代碼的同時(shí)別忘了點(diǎn)個(gè)star 謝謝!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-854048.html
到了這里,關(guān)于【爬蟲項(xiàng)目-4】微博超話內(nèi)容爬取/selenium使用教學(xué)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!