利用Python爬取糗事百科段子信息
文章來源:公眾號-智能化IT系統。
爬蟲技術目前越來越流行,這里介紹一個爬蟲的簡單應用。
爬取的內容為糗事百科文字內容中的信息,如圖所示:
爬取糗事百科文字35頁的信息,通過手動瀏覽,以下為前四頁的網址:
http://www.qiushibaike.com/text/
http://www.qiushibaike.com/text/page/2/?s=4964629
http://www.qiushibaike.com/text/page/3/?s=4964629
http://www.qiushibaike.com/text/page/4/?s=4964629
這里的?s=4964629應該只是從Cookies里提取的用戶標識,去掉后依然能打開網頁。然后把第一頁的網址改為http://www.qiushibaike.com/text/page/1/也能正常瀏覽,故只需更改page后面的數字即可,以此來構造出35頁的網址。
需要爬取的信息有:用戶ID,用戶等級,用戶性別,發表段子文字信息,好笑數量和評論數量,如下圖所示:
案例中運用Python對文件的操作,把爬取的信息存儲在本地的txt文本中。
一. 前置工作:
1.??安裝python
2.??安裝PyCharm
python不用說了。Pycharm是python的開發工具。具體安裝可以百度參考。
?
二. 技術點介紹
爬蟲技術并不需要掌握python非常精通,本案例只是涉及到python如下的基本技術點:
1.?字符串的基本操作
2.?python函數
3.?python元組應用
4.?python的for循環
5.?python的條件判斷
6.?python文件操作
?
另外需要了解一下http的請求,涉及如下:
1.?http請求和響應基本原理
2.?get和post請求基本知識
3.?http請求頭中的User-Agent,便于偽造精確的請求信息
?
本案例是針對python的爬取網頁數據,所以python針對爬蟲的相關技術需要熟悉:
1.?Requests庫(模擬請求)
2.?Re模塊(正則表達式的應用,在請求結果中匹配數據)
最后就是網頁元素的基本知識了,包括如下:
1.?html元素
2.?chrome瀏覽器的使用,以及獲取網頁指定元素的標簽
?
本文不對上述技術點進行講述,讀者如果有問題可以百度搜索一下,應該很快就能熟悉。熟悉了上述技術點,就可以完全掌握下面的爬取代碼了。
?
三. 爬取代碼
如下代碼可以直接復制執行:
import requests
import re
?
headers = {
???'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36'
}
?
info_lists = []
?
defjudgment_sex(class_name):
??if class_name == 'womenIcon':
????return '女'
??else:
????return??'男'
?
def get_info(url):
???res = requests.get(url)
???ids = re.findall('<h2>(.*?)</h2>',res.text,re.S)
???levels = re.findall('<div class="articleGender\D+Icon">(.*?)</div>',res.text,re.S)
???sexs = re.findall('<div class="articleGender(.*?)">',res.text,re.S)
???contents = re.findall('<divclass="content">.*?<span>(.*?)</span>',res.text,re.S)
???laughs = re.findall('<spanclass="stats-vote"><iclass="number">(\d+)</i>',res.text,re.S)
???comments = re.findall('<iclass="number">(\d+)</i>?評論',res.text,re.S)
???for id,level,sex,content,laugh,comment inzip(ids,levels,sexs,contents,laughs,comments):
?????info = {
???????'id':id,
???????'level':level,
???????'sex':judgment_sex(sex),
???????'content':content,
???????'laugh':laugh,
???????'comment':comment
?????}
?????info_lists.append(info)
?
if __name__ =='__main__':
???urls = ['http://www.qiushibaike.com/text/page/{}/'.format(str(i))for i in range(1,36)]
???for url in urls:
?????get_info(url)
???for info_list in info_lists:
?????f = open('C:/Users/Administrator//Desktop/qiushi.text','a+')
?????try:
???????f.write(info_list['id']+'\n')
???????f.write(info_list['level'] + '\n')
???????f.write(info_list['sex'] + '\n')
???????f.write(info_list['content'] + '\n')
???????f.write(info_list['laugh'] + '\n')
???????f.write(info_list['comment'] + '\n\n')
???????f.close()
?????except UnicodeEncodeError:
???????pass
?????print(info_list)
?
運行的結果保存在電腦,文件名為qiushi的文檔中,如圖所示
四. 代碼分析
(1)1~2行
導入程序需要的庫,Requests庫用于請求網頁獲取網頁數據。運用正則表達式不需要用BeautifulSoup解析網頁數據,而是使用Python中的re模塊匹配正則表達式。
(2)4~7行
通過Chrome瀏覽器的開發者工具,復制User-Agent,用于偽裝為瀏覽器,便于爬蟲的穩定性。
(3)17~34行
定義get_info()函數,用于獲取網頁信息并把數據傳入到info_lists列表中。傳入URL后,進行請求。
(4)第9行
定義了一個info_lists空列表,用于存放爬取的信息,每條數據為字典結構。
(5)11~15行
定義judgment_sex()函數,用于判斷用戶的性別。
(5)36~51行
為程序的主入口。通過對網頁URL的觀察,通過列表的推導式構造35個URL,并依次調用get_info()函數,循環遍歷info_lists列表,存入到文件名qiushi的TXT文檔中。
公眾號-智能化IT系統。每周都有技術文章推送,包括原創技術干貨,以及技術工作的心得分享。掃描下方關注。
公眾號-智能化IT系統。每周都有技術文章推送,包括原創技術干貨,以及技術工作的心得分享。掃描下方關注。
總結
以上是生活随笔為你收集整理的利用Python爬取糗事百科段子信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通过Erlang构建TCP服务器
- 下一篇: 【干货特供】dotNet core 应用