一、介紹
爬取貓眼電影的翻版,練練手的同時也有新發現
二、流程
用瀏覽器打開糗事百科,分析站點
抓取單頁內容
利用Requests請求目標站點,得到單個網頁HTML代碼,返回結果正則表達式分析
根據HTML代碼分析得到的用戶名稱、段子文本、點贊人數、評論人數等信息
1.png
保存至文件
通過文件的形式將結果保存,每一部電影一個結果一行Json字符串開啟循環及多線程
對多頁內容遍歷,開啟多線程提高抓取速度 ,這里為了保證獲取文本信息格式的一致性,我就沒有不用多線程了
三、代碼
import requests
import re
import json
from requests.exceptions import RequestException
import time
def get_one_page(url):
use_agent='Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36'
Headers={'User-Agent':use_agent}
#如果不加報頭直接抓取源代碼似乎會報錯,所以我偽裝了一下,打開chrome進入糗事百科,再右鍵打開檢查->network->request headers,把User-Agent復制了
try:
response=requests.get(url,headers=Headers)
if response.status_code == 200:
return response.text
return None
except RequestException:
return None
def parse_one_page(html):
pattern = re.compile('<h2>(.*?)</h2>.*?<span>(.*?)</span>.*?<i cla'
+ 'ss="number">(.*?)</i> (.*?)</span>.*?<i class="number">(.*?)</i>(.*?)</a>', re.S)
items=re.findall(pattern,str(html)) #這里要對html用str()函數,不然會報錯 TypeError: expected string or bytes-like object
#print(items)
for item in items:
yield {
'name':item[0].strip(),
'text':item[1].replace("<br/>",",").strip(), #替換掉網頁中的<br/>轉行標簽,去掉換行符
'vote':(item[2]+item[3]),
'comments':(item[4]+item[5]).strip()
}
def write_to_file(content):
with open('result.text','a',encoding='utf-8') as f:
f.write(json.dumps(content,ensure_ascii=False)+'\n')
f.close()
def main():
for i in range(1, 14):
url = 'https://www.qiushibaike.com/hot/page/' + str(i) #把循環放在這里,不要弄在main()里
print('當前處理頁數:',i)
get_one_page(url)
html=get_one_page(url)
for item in parse_one_page(html):
print(item)
write_to_file(item)
time.sleep(3)
if __name__=='__main__':
main() #這是標準的main格式
四、最后得到的text文件
2.png
五、總結
1.磕磕碰碰的做出來,很開心
2.在這里非常感謝皮皮哥、風、Luffy等大佬的悉心指導