程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python爬蟲——爬取小說

編輯:Python

一、導入requests和parsel庫

requests是一個HTTP請求庫,像浏覽器一樣發送THHP請求來獲取網站信息。

parsel是對 HTML 和 XML 進行解析庫,

import requests
import parsel

二、獲取小說網站內容

通過 url = “https://www.777zw.net/1/1429/” 爬取小說網站內容。

url = "https://www.777zw.net/1/1429/"
response = requests.get(url)
responses = response.text.encode('iso-8859-1').decode('gbk')
print(responses)

在爬取小說網站時遇見一個錯誤爬取中文編譯亂碼:

之後查找資料發現是由於網頁編碼用的方式不同 :

解決方法

查看網站所用編碼方法,打開想爬取頁面開啟開發人員工具,在控制台輸入document.charse查看文本格式

將常規的 “utf-8” 格式轉換成 “gbk”

# utf-8格式
response.encoding = 'utf-8'
# 改成gbk格式
response.text.encode('iso-8859-1').decode('gbk')

獲取網頁內容代碼:

url = "https://www.777zw.net/1/1429/"
response = requests.get(url)
responses = response.text.encode('iso-8859-1').decode('gbk')
print(responses)

三、獲取小說名和獲取小說章節

在開發者工具中找到小說名:

爬取方法

selector = parsel.Selector(responses)
novel_name = selector.css('#info h1::text').get() #小說名

#info 獲取 id 是 info,h1 存取小說名,小說名是文本文件所以用text

找到小說章節

爬取代碼

href = selector.css('#list dd a::attr(href)').getall() #小說章節

get() 獲取一個,getall() 獲取所有小說章節

四、獲取章節名和小說內容

這一步原理和步驟一樣就不多贅述了

五、源代碼

import requests
import parsel
url = "https://www.777zw.net/1/1429/"
response = requests.get(url)
responses = response.text.encode('iso-8859-1').decode('gbk')
print(responses)
selector = parsel.Selector(responses)
novel_name = selector.css('#info h1::text').get() #小說名
href = selector.css('#list dd a::attr(href)').getall() #小說章節
for link in href:
link_url = 'https://www.777zw.net/1/1429/' + link
response_1 = requests.get(link_url)
responses_1 = response_1.text.encode('iso-8859-1').decode('gbk')
selecter_1 = parsel.Selector(responses_1)
title_name = selecter_1.css('.bookname h1::text').get() #小說章節
content_list = selecter_1.css('#content::text').getall() #小說內容
content = '
'.join(content_list)
break
# 保存
with open(novel_name + '.txt',mode = 'a',encoding = 'utf-8') as f:
f.write(title_name)
f.write('
')
f.write(content)
f.write('
')
# print(title_name)
print(novel_name)
print(content_list)

六、結果

先自我介紹一下,小編13年上師交大畢業,曾經在小公司待過,去過華為OPPO等大廠,18年進入阿裡,直到現在。深知大多數初中級java工程師,想要升技能,往往是需要自己摸索成長或是報班學習,但對於培訓機構動則近萬元的學費,著實壓力不小。自己不成體系的自學效率很低又漫長,而且容易碰到天花板技術停止不前。因此我收集了一份《java開發全套學習資料》送給大家,初衷也很簡單,就是希望幫助到想自學又不知道該從何學起的朋友,同時減輕大家的負擔。添加下方名片,即可獲取全套學習資料哦


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved