由于妙筆閣小說網(wǎng)中大多數(shù)小說章節(jié)數(shù)過大肌索,基本上為幾千章致讥。所以挑選后選取了章節(jié)數(shù)為100多章的小說《我是至尊》毕谴。
image
下面詳細描述爬取過程:
1.構建請求頭:
user_agent = 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36'
self.headers = {'User-Agent':user_agent}
2.利用request請求url,并將相應內容轉換為html:
response = requests.get("http://www.mbige.com/info/27-27761/")
response.encoding = response.apparent_encoding
html = lxml.html.fromstring(response.text)
3.目前已經(jīng)得到了小說章節(jié)列表頁面的html
image
對章節(jié)進行檢查缎玫,找到html中每章節(jié)的url
image
利用xpath解析html煮落,得到所有章節(jié)的url列表:
urllst = html.xpath('//ul//li/a/@href')
4.訪問每一個章節(jié)的url,利用xpath解析其html民轴,得到每章節(jié)的內容:
image
title = ''.join(html.xpath('//td[@valign = "top"]/div[@align="center"]/h1/text()'))
part = ''.join(html.xpath('//div[@align="center"]/h2/text()'))
infro = ''.join(html.xpath('//div[@class="border_b"]/text()'))
context = '\n'.join([x.strip() for x in html.xpath('//div[@id="content"]/p/text()') if x])
5.完整代碼:
import requests
import lxml.html
class myspider():
def __init__(self):
#構建請求頭
user_agent = 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36'
self.headers = {'User-Agent':user_agent}
def gethtml(self,url):
#利用request請求url,并將相應內容轉換為html
try:
response = requests.get(url)
except:
response = None
pass
else:
response.encoding = 'gb18030'
finally:
html = lxml.html.fromstring(response.text)
return html
def getpage(self,url):
#利用xpath解析html攻柠,得到所有章節(jié)的url列表
htmlpage = self.gethtml(url);
print(htmlpage)
urllst = htmlpage.xpath('//ul//li/a/@href')
return urllst
def getcontext(self,url):
contextlst = self.getpage(url) #獲取所有章節(jié)的url列表
num = 0
with open('E:/我是至尊.txt', 'a+' ,encoding = 'utf8') as f :
#爬取的每章節(jié)內容寫入到E盤我是至尊.txt
for i in contextlst[14:]:
i= 'http://www.mbige.com' + i #由于獲取到的章節(jié)url不完整,進行補全
html = self.gethtml(i)
title = ''.join(html.xpath('//td[@valign = "top"]/div[@align="center"]/h1/text()'))
part = ''.join(html.xpath('//div[@align="center"]/h2/text()'))
infro = ''.join(html.xpath('//div[@class="border_b"]/text()'))
context = '\n'.join([x.strip() for x in html.xpath('//div[@id="content"]/p/text()') if x])
f.write(str(title)+'\n'+str(part)+'\n'+str(infro)+'\n'+str(context)+'\n'+'\n')
num+=1
print("寫入完成"+"第"+str(num)+"頁")
if __name__ == '__main__':
sp=myspider()
url1='http://www.mbige.com/info/27-27761/'
sp.getcontext(url1)
6.爬取完成后得到的我是至尊.txt部分內容如下:
image
到這里就爬完一部小說啦~~~~
如果對爬取全站的小說信息感興趣后裸,可以參考我的上一篇文章《利用Python爬取妙筆閣小說網(wǎng)站的小說信息并保存為txt和csv格式》瑰钮,歡迎閱讀。