用Requests+正則表達式爬取糗事百科段子

一、介紹

爬取貓眼電影的翻版,練練手的同時也有新發現

二、流程

  • 用瀏覽器打開糗事百科,分析站點

  • 抓取單頁內容
    利用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等大佬的悉心指導

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容