1. 程式人生 > >爬取歷史類小說

爬取歷史類小說

導包

import requests
import lxml  #lxml是python的一個解析庫,支援HTML和XML的解析,支援XPath解析方式,而且解析效率非常高
from bs4 import BeautifulSoup
import pandas as pd
import os

headers從網頁獲得,按F12, —>NETWORK---->重新整理網頁---->隨便點一個name----->找到headers:User-Agent

headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0'}

獲得原始碼,轉HTML格式,獲取想要的內容

url='http://www.biquge.com.tw/lishi/'
yuanma_caidanye=requests.get(url,headers=headers)  #選單頁的原始碼
yuanma_caidanye.encoding='gbk'
html_yuanma_caidanye=BeautifulSoup(yuanma_caidanye.text,'lxml')  # 原始碼轉html格式
lianjie=[]
a=html_yuanma_caidanye.find_all('span',class_='s2')  #獲取各個小說的連結
for i in a :
    lianjie.append(i.a['href'])

從上面得到的小說連結獲得下一層想要的東西,這次用 html.parser ,這個能爬全部,比上面 lxml 效果好

title=[]
lianjie_zhangjie=[]
for i in lianjie:
    yuanma_xiaoshuoye=requests.get(i)   #獲取小說原始碼
    yuanma_xiaoshuoye.encoding='gbk'
    html_yuanma_xiaoshuoye=BeautifulSoup(yuanma_xiaoshuoye.text,'html.parser') # 這個牛逼,能爬全部☆☆☆☆☆☆☆☆
    title.append(html_yuanma_xiaoshuoye.find('h1').text.strip())
    x=html_yuanma_xiaoshuoye.find_all('dd')
    lianjie_shu=[]
    for j in x:
        lianjie_shu.append(j)
    lianjie_zhangjie.append(lianjie_shu)

上面得到的半截的連結,給加上前半截

lianjie_zhangjie_quan=[]
for shu in lianjie_zhangjie:
    lianjie_shu2=[]
    for i in shu:
        if i.find('a'):
            try :
                aa=i.find('a')['href']
                lianjie_shu2.append('http://www.biquge.com.tw'+aa)
            except:
                print('i get the error')
    lianjie_zhangjie_quan.append(lianjie_shu2)

從章節連結爬取章節內容,這段程式碼要執行很長時間

shu_all=[]
for shu in lianjie_zhangjie_quan[:]:
    shu_quanwen=[]
    for i in shu:
        yuanma_zhangjie=requests.get(i,headers)
        yuanma_zhangjie.encoding='gbk'
        html_zhangjie=BeautifulSoup(yuanma_zhangjie.text,'html.parser')
        try:
            shu_quanwen.append(html_zhangjie.find('div',id='content').text)
        except:
            print('hello world')
    shu_all.append(shu_quanwen)

爬下來的書進行儲存

for i in range(len(shu_all)):
    filePath=r'C:\Users\Administrater\Desktop\pachong\book\\'+title[i]+".txt"
    if not os.path.exists(filePath):
        print('hi')
        f = open(filePath, 'w', encoding="utf8")
        for j in shu_all[i]:
            f.write(j)
        f.close()

大功告成