新四季網

python爬蟲爬取小說內容(Python爬蟲自學筆記爬取小說)

2023-06-07 07:37:28 3

1 功能及版本說明

功能:爬取小說目錄和章節內容,並將章節內容下載到本地txt文件中。

版本:v1.1

增加代理IP,實現小說完整下載。

2 開發環境

開發環境:Python3和PyCharm;

3 網站介紹及分析

以免費小說全文閱讀網站(http://www.quanwenyuedu.io/)為例,爬取該網站上面的小說。通過快捷鍵F12,可以調出當前網頁的源碼信息,分析相關源碼。

首先看小說目錄頁面,通過點擊藍色邊框內的箭頭,再點擊左側頁面中要了解的信息,在右側就會出現相關的源碼信息。

小說名稱"遮天"對應的源碼為:遮天;

小說作者"作者:辰東"對應的源碼為:"作者:"辰東;

小說章節信息對應的源碼為:第1章 星空中的青銅巨棺;

下面看章節內容頁面,發現小說具體章節內容在代碼......中。

4 編碼思路

1) 提供小說目錄頁的url;

2) 爬取目錄頁面信息;

3) 提取目錄頁面中小說的名稱、作者、具體章節的名稱和網址信息;

4) 根據提取到的章節網址(一般為相對路徑網址),結合目錄頁網址進行分析,合成絕對路徑的章節網址;

5) 爬取小說章節網頁內的正文內容,判斷網站是否訪問成功,若訪問不成功則隨機選取代理IP,繼續訪問;若訪問成功,則將正文內容保存到本地txt文件中;

6) 循環小說章節網址,依次爬取下載保存到本地。

5 代碼實現

代碼分兩個py文件,crawl_v1.1.py為爬取小說並下載的代碼,proxy_ip.py為爬取代理IP的代碼,具體如下:

完整代碼如下:

crawl_v1.1.py

# 爬取小說 v1.1import requestsfrom bs4 import BeautifulSoupimport timeimport randomimport proxy_ipurl = "http://www.quanwenyuedu.io/n/zhetian/xiaoshuo.html"# 爬取url網址內容def get_url(url,proxies): headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0", "Accept":"text/html,application/xhtml xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Accept-Encoding":"gzip, deflate, sdch", "Accept-Language":"zh-CN,zh;q=0.8", "Cache-Control":"max-age=0", "Connection":"keep-alive"} r = requests.get(url,headers = headers,proxies = proxies) while r.status_code != 200: p = proxy_ip.get_random_ip r = requests.get(url, headers=headers, proxies=p) return r# 獲取小說名稱和作者proxies_random = proxy_ip.get_random_ipr = get_url(url,proxies_random)soup = BeautifulSoup(r.text,"html.parser")title = soup.h1.textauthor = soup.find_all("p")[1].text[3:]chapter_list = soup.find_all("li")for i in chapter_list: # 獲取小說章節名稱和網址 i_url = i.a.get("href") chapter_url = url[:-13] i_url chapter_name = i.text # 獲取小說章節內容 r = get_url(chapter_url,proxies_random) chapter_soup = BeautifulSoup(r.text,"html.parser") content = chapter_soup.find_all("p") # 將章節內容寫入txt文件 print(chapter_name " 正在下載......") for c in content: with open(title "_" author ) as f: f.write(c.text "\n") print(chapter_name " 下載完成")

proxy_ip.py

# 爬取代理IPimport requestsfrom bs4 import BeautifulSoupimport randomurl = "https://www.xicidaili.com/nn"headers = { "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0", "Accept": "text/html,application/xhtml xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Accept-Encoding": "gzip, deflate, sdch", "Accept-Language": "zh-CN,zh;q=0.8", "Cache-Control": "max-age=0", "Connection": "keep-alive"}ip_list = []r = requests.get(url,headers = headers)soup = BeautifulSoup(r.text,"html.parser")# 提取ip相關的標籤tr = soup.find_all("tr")tr = tr[1:]for i in tr: td = i.find_all("td") td_2 = td[1].text td_3 = td[2].text td_6 = td[5].text ip = td_6 "://" td_2 ":" td_3 ip_list.append(ip)def get_random_ip: ip_random = random.choice(ip_list) i = ip_random.find(":") # 定位":",便於提取"http"或"https" proxy = {ip_random[:i]:ip_random} return proxy

代碼運行效果如下:

6 代碼問題匯總

1) 在代碼調試階段,出現如下錯誤:

UnicodeEncodeError: 'gbk' codec can't encode character '\xa0' in position 7: illegal multibyte sequence

經查詢分析,write函數的默認編碼不是utf-8,在write中設置utf-8編碼:write("","a",encoding="utf-8");

2) 下載速度過慢;

3) 代碼運行,小說下載到990章時停住了,運行沒有結束,也沒有給出錯誤代碼,只是不再繼續運行下去了;

原因分析:懷疑是內存不足,或者寫入函數write內存限制。

7 相關學習知識點

1) 列表追加元素:list.append[];

2) 隨機選取列表中的元素:需要引入random庫,調用random.choice函數;

3) 其他py文件中函數的調用:在要引入的文件中定義函數def get_random_ip;在本文件中import py文件,並調用get_random_ip函數;

4) While循環語句,判斷網站訪問是否成功;

8 結束語

本次代碼解決了反爬蟲訪問限制的問題,但下載速度很慢,且在進行到990章時代碼運行停止了,沒有給出錯誤原因,需要進一步優化。

將此次編碼的過程及源碼分享給大家,供大家參考。對於錯誤的地方,或有更好的建議,希望大家提出來,不勝感激!

,
同类文章
 陳冠希被曝當爸爸 老婆維密超模露點照觀看

陳冠希被曝當爸爸 老婆維密超模露點照觀看

6月12日,有網友曬出陳冠希和秦舒培為女兒舉辦百日宴的照片,陳冠希抱著女兒盡顯父愛,身旁站著秦舒培和家人。網友還曝陳冠希女兒名字是Alaia,此前秦舒培曾多次被傳懷孕及在美國生產。去年陳冠希秦舒培曾同逛嬰兒用品店;今年1月有網友偶遇秦舒培,稱其肚子凸起;今年4月有爆料稱秦舒培已誕下女兒。秦舒培是90
 日本十八禁的工口遊戲 電車之狼尾行系列你喜歡哪個?

日本十八禁的工口遊戲 電車之狼尾行系列你喜歡哪個?

工口遊戲,很多人應該都聽說過,工口遊戲其實就是日本遊戲產業裡面一些尺度較大的遊戲,我們也都了解日本的遊戲行業是很發達的,其中自然也少不了一些涉及大尺度的色情遊戲,工口遊戲就是這個一個類別的,下面讓我們來盤點幾個日本十八禁的工口遊戲。日本十八禁的工口遊戲:一、性感沙灘那個被碧撥蕩漾清可見底的海水圍繞的
 韓國十大被禁播的女團MV 尺度太大令人慾罷不能(視頻)

韓國十大被禁播的女團MV 尺度太大令人慾罷不能(視頻)

韓國的女團是一直是以性感而聞名,不僅在韓國有一大批的粉絲,就連中國和歐美國家也有一大票的粉絲,小編自然也是韓國女團粉絲大軍中的一員,看過韓國女團MV的人都知道,一向尺度是非常大的,各種誘惑性的東西看得欲罷不能,然而也正是因為尺度太大而遭到禁播,下面就讓我們一起去看看那些被禁播的MV。一、Stella
 莫菁門事件始末 因愛生恨散布大量豔照

莫菁門事件始末 因愛生恨散布大量豔照

莫菁門事件是發生在2010年廣西柳州的一次「豔照門事件」,那時候時下流行各種門事件,而廣西柳州莫菁門事件之所以能引起網絡上極大的討論,就是因為網友認為發帖者的行為已經超越了道德底線,莫菁門事件中究竟有什麼愛恨情仇呢?莫菁門事件:莫菁,女,廣西柳州人。2010年11月,一名柳州女子的不雅「豔照」在網際
 陳法蓉萬人騎是什麼意思?她演過哪些三級片?

陳法蓉萬人騎是什麼意思?她演過哪些三級片?

陳法蓉是香港著名的女藝人之一,曾經還獲得1989年香港小姐的冠軍,可以說是一位老牌的港姐代表,曾經也有演過三級片,網上曾經有一種對於她的說法是「萬人騎」,說的就是她的感情經歷十分豐富,交往過很多任的男朋友,最後都沒有一個好的結果。陳法蓉介紹:陳法蓉,1967年10月28日出生於香港,祖籍江蘇宿遷,中
 蔣英與李雙江婚外情?關係曖昧是真的嗎?

蔣英與李雙江婚外情?關係曖昧是真的嗎?

蔣英是中國最傑出的女聲樂家,中國航天之父錢學森的夫人,武俠小說大師金庸的表姐,大詩人徐志摩的表妹,看到這麼多人的名字你一定會驚嘆,而在網上曾有流傳蔣英與李雙江的婚外情事件也是引起不小的轟動,蔣英與李雙江是真的嗎,讓我們一起去揭秘事情的真相。蔣英簡介:蔣英生於1919年9月7日,浙江海寧人,中國最傑出
 《狼心狗肺》《你的淺笑》誰曲子更密鑼緊鼓

《狼心狗肺》《你的淺笑》誰曲子更密鑼緊鼓

港島妹妹和梵谷先生:天津嘉年華梁龍說:這不都坐著呢嗎我們說:坐下,牛逼安保說:菠菜賤賣。2019年10月28日 (114)|lululu0726:搖滾是音樂 聽音樂不聽音樂光聽歌詞?前戲不重要麼各位?2020年11月16日 (51)|死在柯本槍下:前面叨咕的是不是:上班了上班了他媽媽沒話說?2021
 柯凡錄音門事件 因侮辱詹姆斯而遭到封殺?

柯凡錄音門事件 因侮辱詹姆斯而遭到封殺?

柯凡,中國籃球解說員,看過NBA的朋友肯定對於他不會太陌生,柯凡搭檔過很多著名的體育解說員,但是因為在2015-2016NBA總決賽期間曝出的錄音門事件中侮辱了詹姆斯被球迷口誅筆伐,柯凡也因此被暫時停止工作反省,柯凡究竟有沒有被封殺呢?柯凡簡介:柯凡,男,北京市人,1986年3月29日出生。籃球解說
 病態三部曲背後虐心的故事 打回原形/防不勝防/十面埋伏

病態三部曲背後虐心的故事 打回原形/防不勝防/十面埋伏

黃偉文是香港樂壇著名的作詞人,他給很多音樂人都寫過歌詞也都是耳熟能詳,比如說《可惜我是水瓶座》《浮誇》《下一站天后》《喜帖街》等等,他的歌能讓人產生非常多的共鳴,在病態三部曲中更是引起無數人對於愛情的遺憾,他的病態三部曲分別是哪三首呢?病態三部曲:《打回原形》《打回原形》講愛之卑微。在愛情裡面,人難
 《愛你這樣傻》與《你從未說過愛我》哪首變幻莫測

《愛你這樣傻》與《你從未說過愛我》哪首變幻莫測

南極不季寞:90後聽這種歌的還有幾個2015年9月20日 (6017)|Ea-bon:真系好聽無得頂啊,睇下幾多人卑贊!!12015年12月2日 (2092)|麥芽先生:唱歌的也傻聽歌的也傻2015年3月27日 (867)|六級詞彙小能手:22歲的阿姨沒有談過戀愛但是喜歡著一個人。2017年10月1