亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python實現的爬取小說爬蟲功能示例

發布時間:2020-10-09 03:39:58 來源:腳本之家 閱讀:182 作者:陽光Cherry夢 欄目:開發技術

本文實例講述了Python實現的爬取小說爬蟲功能。分享給大家供大家參考,具體如下:

想把頂點小說網上的一篇持續更新的小說下下來,就寫了一個簡單的爬蟲,可以爬取爬取各個章節的內容,保存到txt文檔中,支持持續更新保存。需要配置一些信息,設置文檔保存路徑,書名等。寫著玩,可能不大規范。

# coding=utf-8
import requests
from lxml import etree
from urllib.parse import urljoin
import re
import os
# 獲取頁面,并返回解析整理好的文本
def get_page(url):
  response = requests.get(url, headers=header)
  set_encoding(response)
  text = parse_page(response.text)
  return text
# 解析頁面,將當前頁面中的文字篩選出來
def parse_page(html):
  title = re.findall('<div class="bookname">\s+<h2>(.+?)</h2>', html)[0]
  content = re.findall('div id="content">(.*?)</div>', html, re.S)[0]
  content = content.replace('<br />', '').replace(' ', ' ').replace('\r\n\r\n', '\r\n')
  content = title + '\r\n' + content + '\r\n\r\n'
  return content
# 將文本追加到file_path對應的txt中
def save_page(path, text):
  with open(path, 'a', encoding='utf-8') as f:
    f.write(text)
# 設置對response得到文本的解析編碼為'gbk'
def set_encoding(response):
  response.encoding = 'gbk'
# 從配置文件中獲取當前保存的鏈接總數
def get_current_chapters_count(path):
  # (1)第一次讀配置文件可能沒有創建,所以要支持沒有文件創建文件的功能(2)如果文件存在,則不能清空,參考https://www.jb51.net/article/158740.htm
  with open(path, 'a+') as f:
    f.seek(0)
    res = f.read()
    if res == '':
      return 0
    else:
      return int(res)
# 將保存的鏈接總數保存到配置文件中
def set_current_chapters_count(path, count):
  with open(path, 'w') as f:
    f.write(str(count))
# 需要配置的字典
config_dic = dict(start_url='http://www.booktxt.net/2_2220/', # 待下載小說的章節首頁 
         latest_item=9, # 列出的所有章節鏈接中,前面幾個鏈接為最新章節,一般為9個,爬取時避免與最后部分重復,所以前面9個鏈接不爬取
         bookname='贅婿', # 待下載的小說名 
         folder_path='D:\\') #保存位置
domain = 'http://www.booktxt.net' # 頂點網域名
if __name__ == '__main__':
  chapter_url_list = []
  response = requests.get(config_dic['start_url'], headers=header)
  set_encoding(response)
  html = etree.HTML(response.text)
  chapters = html.xpath('//dd')
  print('所有鏈接' + str(len(chapters)))
  chapters = chapters[config_dic['latest_item']:] # 前9章為最新章節,后面還會重復,這里去掉
  print('不重復有效章節鏈接' + str(len(chapters)))
  folder_path = config_dic['folder_path'] + config_dic['bookname']
  if not os.path.exists(folder_path):
    os.mkdir(folder_path)
  file_path = folder_path + '\\' + config_dic['bookname'] + '.txt'
  config_file_path = folder_path + '\\' + 'config.txt'
  print('小說存儲路徑為:' + file_path)
  print('配置文件存儲路徑為:' + config_file_path)
  saved_count = get_current_chapters_count(config_file_path) # 獲取目前保存的小說中已經包含的章節數
  print('當前' + file_path + '中已經保存的章節總數' + str(saved_count))
  if saved_count < len(chapters): # 說明有更新
    set_current_chapters_count(config_file_path, len(chapters))
    print('共更新 ' + str(len(chapters) - saved_count) + ' 章')
    for c in chapters[saved_count:]: # 從上次保存的位置開始繼續保存
      url = c.xpath('a/@href')[0]
      url = urljoin(domain, url)
      txt = c.xpath('a/text()')[0]
      chapter_url_list.append(url)
      print(url)
      print(txt)
      save_page(file_path, get_page(url))
  else:
    print('小說還沒有更新哦')

更多關于Python相關內容可查看本站專題:《Python Socket編程技巧總結》、《Python正則表達式用法總結》、《Python數據結構與算法教程》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》、《Python入門與進階經典教程》及《Python文件與目錄操作技巧匯總》

希望本文所述對大家Python程序設計有所幫助。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大方县| 绥化市| 潼关县| 交城县| 中牟县| 安义县| 成武县| 法库县| 梁河县| 清远市| 克东县| 洪湖市| 澄城县| 新绛县| 江川县| 临江市| 安图县| 陆河县| 辉县市| 准格尔旗| 当阳市| 五莲县| 泌阳县| 华容县| 湘潭市| 宝清县| 昭苏县| 荔波县| 定陶县| 耒阳市| 绩溪县| 西乌珠穆沁旗| 资溪县| 江陵县| 商洛市| 扎兰屯市| 武胜县| 西城区| 雷州市| 秦皇岛市| 原平市|