1. 程式人生 > 實用技巧 >編寫爬取全站小說py指令碼成功!記錄下

編寫爬取全站小說py指令碼成功!記錄下

備註:此指令碼爬取小說速度過慢,幾分鐘爬取一本,

1 接下來會用scrapy爬蟲框架重構指令碼,

2 並且實現mysql或者mongoDB資料庫存入資料,

3 建立小說站點將小說展示出來

4 爬取.yuetut小說網站小說py指令碼

# -*- coding:utf-8 -*-

import requests
from pyquery import PyQuery # 原生的css選擇器
import user_agent
import time

yizhangjie_url = 'http://www.yuetut.com/cbook_2675/3.html'

headers = {
  'User-Agent' :user_agent.generate_user_agent()
  }

# 章節的url name 書名
def crawl_one_chapter(yizhangjie_url=None, name=None):
    """
    :param yizhangjie_url:章節url
    :param name: 書名
    :return: None
    """
    # proxy = {
    #   "http":"http://" + requests.get("http://123.207.35.36:5010/get/").text
    # }
    response = requests.get(url=yizhangjie_url, headers=headers) #,proxys=proxy
    doc = PyQuery(response.text)
    content = doc("#content").text()
    title = doc("#wrapper > div.content_read > div > div.bookname > h1").text()
    # print(title)
    with open(file=name+".txt", mode='a+', encoding='utf-8') as f:    
        f.write(title + '\n\n' + content + '\n\n')
    

# crawl_one_chapter( name='凡人修仙傳-仙界', yizhangjie_url=yizhangjie_url)

# 獲取一本書的所有章節的url 獲取bookname
# 需要一本書的目錄頁面
# def get_index(index_url='http://www.yuetut.com/cbook_2675/'):
def get_index(index_url=None):
  # 目錄
  
  text = requests.get(url=index_url).text
  doc = PyQuery(text)
  links = doc('div#list  a')
  # print(links)
  name = doc('h1').text()

  # 基於使用者體驗而設計的提示
  print('==================正在爬樹:{}===================='.format(name))    
  
  

  for link in list(links.items())[8:]:
      yizhangjie_url = 'http://www.yuetut.com' +link.attr.href
      crawl_one_chapter(yizhangjie_url=yizhangjie_url, name=name)
      


def get_all_book_url():
    all_book_url = 'http://www.yuetut.com/cbook_all.html'
    response = requests.get(url=all_book_url)
    doc = PyQuery(response.text)
    # 獲取很多本書的連結
    links = doc('div.novellist a')
    # print(links)
    for link in links.items():
      index_url = 'http://www.yuetut.com'+link.attr.href
      # print(index_url)
      get_index(index_url=index_url)

get_all_book_url()


"""
伺服器是反爬
我們爬蟲是反反爬
UA 告訴伺服器我是從瀏覽器來的,我是正常的
不會被封
ip池 非常多的ip 不斷的換ip
cookie池 登入 cookie驗證 不斷的換cookie
selenium ajax解析
cookie池
單機爬蟲速度慢
多執行緒爬蟲,多程序爬蟲,
分散式爬蟲
scrapy
  各種中介軟體
  pipeline 資料持久化,寫入資料
scrapyd
  分散式爬蟲

  --工作之後-領悟
  負載均衡-不僅是爬蟲

  一臺電腦 執行爬蟲 一臺電腦的負載是有限的
  很多臺電腦 負載均衡到每一臺電腦
  加電腦
"""

展示效果