Python 第一個爬蟲,爬取 147 小說

xingkong12138發表於2020-05-08

最近剛學習了Python,所以做了一個Python 的爬蟲,爬取147的小說。

可以參觀下我的部落格:我的部落格

剛學習Python,有什麼不足的地方大佬請指出:smile:

分析147網頁結構

可以透過谷歌,使用F12開啟控制檯

發現章節列表是由<dd></dd>包裹

章節標題是由<div class="bookname"></div>下的H1標籤包裹

章節內容是由 <div id="content"></div>下的P標籤包裹

廢話不多說,上程式碼

#爬取147小說網站的小說
# -*- coding: utf-8 -*-
import requests
import re
import random
import time

#實現抓取章節內容
def GetChapterContent(url):
    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36',
               'Cookie':'Hm_lvt_f9e74ced1e1a12f9e31d3af8376b6d63=1588752082; Hm_lpvt_f9e74ced1e1a12f9e31d3af8376b6d63=1588756920',
               'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3'}
    cookies = dict(Hm_lpvt_f9e74ced1e1a12f9e31d3af8376b6d63="1588758919",Hm_lvt_f9e74ced1e1a12f9e31d3af8376b6d63="1588752082")
    res = requests.get(url,headers=headers,cookies=cookies)
    res.encoding = 'utf-8'
    content_html = res.text
    # 獲取到標題
    title_div=re.findall(r'<div class="bookname">([\s\S]*?)</div>',content_html)[0]
    title = re.findall(r'<h1>(.*?)</h1>', title_div, re.S)[0]
    #獲取內容
    content_div = re.findall(r'<div id="content">([\s\S]*?)</div>', content_html)[0]
    contents = re.findall(r'<p>(.*?)</p>', content_div, re.S)
    # 把標題和內容組合
    content = ''
    content += title + "\n"
    for i in contents:
        content += i + "\n"

    #然後返回內容
    return content





#實現抓取章節內容url
def GetChapterList(url):
    res = requests.get(url)
    res.encoding = 'utf-8'
    chapter_html = res.text

    #獲取到章節列表
    chapter_list_div = re.findall(r'<dl>([\s\S]*?)</dl>',chapter_html)[0]

    #獲取到章節列表以及連結
    chapter_list_dd = re.findall(r'<dd>(.*?)</dd>',chapter_list_div)
    chapter_url_info = []
    for info in chapter_list_dd:
        chapter_list_info = re.findall(r'href="(.*?)">(.*?)<',info)[0]
        chapter_url = "http://www.147xs.org" + chapter_list_info[0]
        chapter_url_info.append([chapter_url,chapter_list_info[1]])
    return chapter_url_info

url="http://www.147xs.org/book/13794/"

chapter_urls = GetChapterList(url)

for url in chapter_urls:
    content = GetChapterContent(url[0])
    #把內容儲存到檔案
    try:
        with open("./xiaoshuo.txt","a+",encoding="UTF-8") as f:
            f.write(content)
        print("章節:{} 抓取成功".format(url[1]))
    except Exception:
        print("章節:{} 抓取失敗".format(url[1]))
    time.sleep(random.random())  # 暫停0~1秒,時間區間:[0,1]

print("抓取成功")
本作品採用《CC 協議》,轉載必須註明作者和本文連結
我的部落格:www.zhangkaixing.com

相關文章