Iniciantes em répteis (1): Crawling Biquge Novels (nova explicação detalhada de uso)

Eu não sei o que dizer

Como um novo rastreador, o primeiro pequeno projeto é, claro, escalar nossos novos amigos- "Xin Bi Qu Ge"
não é difícil,
mas eu ainda compartilho meu próprio histórico de código,
na esperança de dar a você algumas ideias ou ajuda ,
claro, se houverGangsterPode apontar erros ou melhorias,
claro que é melhor,
espero por você ~

Exibir projeto

Antes de explicar o projeto,
deixe-me mostrar as funções
, caso contrário, depois de assistir por um longo tempo, o
resultado não é o que eu queria e não é autismo.
<---------------------------------- Linha divisória ------------- ------------------------>
status de uso
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

Para ser honesto, sinto que posso escrever esse tipo de código de uma forma bastante ingênua. Quem faz o download de romances não é um livro inteiro, e o
resultado é meu estúpido capítulo após capítulo, e até sinto que sou bom e mau.

Explicação de ideias de código

Módulos usados ​​no projeto

import os
from time import sleep
import requests
from lxml import etree

Se você não tiver um, pode instalá-lo sozinho. Embora a maioria dos amigos deva saber, vamos conversar sobre isso.

pip/pip3 install 想要安装的模块名

Depois que o módulo for instalado, vamos explicar o código

import os
from time import sleep

import requests
from lxml import etree

# 新笔趣阁的全部小说界面链接,所有小说链接都在这里
url = 'http://www.xbiquge.la/xiaoshuodaquan/'
# 请求头
headers = {
    
    
    'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"
}
# 向新笔趣阁发送get请求
all_book_r = requests.get(url, headers=headers)
# 解析返回的HTML页面数据
all_book_html = etree.HTML(all_book_r.content.decode('utf-8'))

Entre primeiro na página de todos os romances de Xinbi Quge >>> Clique para entrar
Clique no canto superior direito do tecladochave f12ouclique com o botão direitoClique em Verificar para entrar na interface de depuração da página (a parte branca à direita) e
, em seguida, clique no botão de seleção no canto superior esquerdo da plataforma de depuração, primeiro selecione um romance aleatoriamente,
após clicar, descobrimos que a interface html na plataforma de depuração à esquerda saltou para o local que selecionamos,
nós Você pode achar que este é um rótulo em uma lista ul, e esta lista ul store com links para todo o romance ,
que é fácil de manusear -
Insira a descrição da imagem aqui
nós temos um link para todos os novos romances do Fun Club do Chrome plug-xpath
não ser Baixe e instale você mesmo (altamente recomendado, especialmente fácil de usar)
Link: https://pan.baidu.com/s/1_HzBzOp-vaWFkiuE2U9yFQ
Código de extração:
sb7p uso do xpath: aqui está o blog de um cara grande, você pode conferir se não entender
Insira a descrição da imagem aqui
Colocamos o código que pode obter corretamente as informações de que precisamos no método xpath. O
método xpath colocará todas as informações de que precisamos na página HTML obtida em uma lista,
que é o nome da variável que você definiu

# 储存所有小说链接的列表
all_book_url = all_book_html.xpath('//div[@class="novellist"]/ul/li/a/@href')
# 储存所有小说名的列表
all_book_title = all_book_html.xpath('//div[@class="novellist"]/ul/li/a/text()')
print(all_book_url) # 下图

Insira a descrição da imagem aqui
Defina o valor num, e o valor num será +1 toda vez que o ciclo for julgado, até que o romance seja encontrado, então o valor num será usado como o subscrito da lista acima para obter o link do romance que o usuário deseja baixar e, em seguida, obter os dados do romance

# 输入你想找的小说名
find_book = input('输入想下载的书名:')
num = 0
# 通过for循环判断是否有用户想找的小说
for book_title in all_book_title:
    # 有则获取该小说你想要的数据
    if find_book == book_title:
        print('找到了,您要的', book_title)
        # 找到该小说的链接
        book_url = all_book_url[num]
        # 向小说页面发送请求
        book_r = requests.get(book_url, headers=headers)
        # 解析
        book_html = etree.HTML(book_r.content.decode('utf-8'))
        # 该小说的章节链接列表
        book_url = book_html.xpath('//div[@id="list"]/dl/dd/a/@href')
        # 该小说的章节名列表
        chapter_title = book_html.xpath('//div[@id="list"]/dl/dd/a/text()')
    # 循环一次下标加一
    num += 1

Para evitar que os romances baixados sejam instalados na mesma pasta,
não só é confuso, mas também difícil encontrar os capítulos dos romances que você deseja ler (na verdade, desde que os conteúdos dos romances sejam instalados juntos, não precisa ser tão problemático, mas minha irmã pensou nisso na época)

# 判断该路径是否存在,存在则返回true,不存在则返回flase
judge = os.path.exists('../小说/%s' % str(book_title))
# 判断judge是否为true,如果不是则创建该路径
if not judge:     
    os.makedirs('../小说/%s' % str(book_title))

Por meio do valor inserido pelo usuário, os links dos capítulos necessários são retirados ciclicamente e, em seguida, o conteúdo do texto do romance é obtido por meio do xpath

# 告诉用户小说有多少章节
print('<------请输入数字(该小说共有%s章)------>' % len(chapter_title))
        # 获取用户需要下载的章节
        download_book_start = int(input('输入从第几章开始下载:'))
        download_book_end = int(input('输入到第几章结束:'))
        chapter_num = 0
        # download_book_start - 1是因为列表下标是从0开始的
        for book_content_url in book_url[download_book_start - 1:download_book_end]:
            # 防止获取太快get不到数据
            sleep(2)
            new_book_content_url = 'http://www.xbiquge.la' + book_content_url
            book_content_r = requests.get(new_book_content_url, headers=headers)
            book_content_html = etree.HTML(book_content_r.content.decode('utf-8'))
            # 该章节小说内容列表
            book_content = book_content_html.xpath('//div[@class="box_con"]/div[@id="content"]/text()')

Faça um loop dos dados na lista de conteúdo um por um e salve-os na string all_content e, em
seguida , grave -os no arquivo de texto através do método with open

            with open('../小说/%s/%s.text' % (str(book_title), chapter_title[download_book_start + chapter_num -1]), 'w', encoding='utf-8') as write_content:
                # 用来储存小说内容的字符串
                all_content = ''
                for content in book_content:
                    all_content += content
                write_content.write(all_content)
                print(chapter_title[download_book_start + chapter_num -1], '--下载成功')
                # 用来获取小说章节名
                chapter_num += 1
        print('全部下载完成')

emmm, talvez talvez acabado, deve ser bem detalhado ,
Moe ShinEscreva pela primeira vez, se houver alguma falha, você pode colocá-la ( não borrife ), e ela irá melhorar gradualmente

Código completo

import os
from time import sleep

import requests
from lxml import etree

url = 'http://www.xbiquge.la/xiaoshuodaquan/'

headers = {
    
    
    'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"
}

all_book_r = requests.get(url, headers=headers)
all_book_html = etree.HTML(all_book_r.content.decode('utf-8'))
all_book_url = all_book_html.xpath('//div[@class="novellist"]/ul/li/a/@href')
all_book_title = all_book_html.xpath('//div[@class="novellist"]/ul/li/a/text()')
print(all_book_url)
find_book = input('输入想下载的书名:')
num = 0
for book_title in all_book_title:
    if find_book == book_title:
        print('找到了,您要的', book_title)
        book_url = all_book_url[num]
        book_r = requests.get(book_url, headers=headers)
        book_html = etree.HTML(book_r.content.decode('utf-8'))
        book_url = book_html.xpath('//div[@id="list"]/dl/dd/a/@href')
        chapter_title = book_html.xpath('//div[@id="list"]/dl/dd/a/text()')
        judge = os.path.exists('../小说/%s' % str(book_title))
        if not judge:     
          os.makedirs('../小说/%s' % str(book_title))
        print('<------请输入数字(该小说共有%s章)------>' % len(chapter_title))
        download_book_start = int(input('输入从第几章开始下载:'))
        download_book_end = int(input('输入到第几章结束:'))
        chapter_num = 0
        for book_content_url in book_url[download_book_start - 1:download_book_end]:
            sleep(2)
            new_book_content_url = 'http://www.xbiquge.la' + book_content_url
            book_content_r = requests.get(new_book_content_url, headers=headers)
            book_content_html = etree.HTML(book_content_r.content.decode('utf-8'))
            book_content = book_content_html.xpath('//div[@class="box_con"]/div[@id="content"]/text()')
            with open('../小说/%s/%s.text' % (str(book_title), chapter_title[download_book_start + chapter_num -1]), 'w', encoding='utf-8') as write_content:
                all_content = ''
                for content in book_content:
                    all_content += content
                write_content.write(all_content)
                print(chapter_title[download_book_start + chapter_num -1], '--下载成功')
                chapter_num += 1
        print('全部下载完成')
        break
    elif num + 1 == len(all_book_title):
        print('查无此书')
    num += 1

`

Acho que você gosta

Origin blog.csdn.net/qq_38666686/article/details/109644659
Recomendado
Clasificación