吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4176|回复: 36
收起左侧

[Python 转载] Python爬取网络小说

  [复制链接]
Leafmoes 发表于 2020-2-23 23:00
本帖最后由 Leafmoes 于 2020-2-24 13:58 编辑

(Python学习第一天!本代码不完善,只能爬取https://www.xsbiquge.com这一个站点....而且也没有添加选想直接进入某个模式......(懒
下面是代码(感觉直接贴代码......不过代码有注释
[Python] 纯文本查看 复制代码
import urllib.request
from urllib import parse
import re
# 定义一些变量的初始值
list_content = ''


# 功能
# 搜索
def search(text):
    text = parse.quote(text)  # 把用户输入的关键词转码为url编码
    search_url = 'https://www.xsbiquge.com/search.php?keyword=' + text
    search_html = urllib.request.urlopen(search_url).read()
    search_html = search_html.decode('utf-8')
    search_html = search_html.replace('\n', '').replace('\r', '')
    search_rule = r'<div class="result-item result-game-item">(.*?)</div>'
    search_num = re.finditer(search_rule, search_html, re.S)
    a = 0
    for i in search_num:
        # 标题
        search_rule = r'<a cpos="title".*?<span>(.+?)</span>'
        search_title = re.findall(search_rule, search_html, re.S)
        search_title = '标题:' + search_title[a] + '\n'
        # 简介
        search_rule = r'<p class="result-game-item-desc">(.+?)</p>'
        search_info = re.findall(search_rule, search_html, re.S)
        search_info = '简介:' + search_info[a] + '\n'
        # 作者
        search_rule = r'<span class="result-game-item-info-tag-title preBold">作者:</span> +<span.*?>(.+?)</span>'
        search_user = re.findall(search_rule, search_html, re.S)
        search_user = '作者:' + search_user[a] + '\n'
        # 类型
        search_rule = r'<span class="result-game-item-info-tag-title preBold">类型:</span> +<span.*?>(.+?)</span>'
        search_style = re.findall(search_rule, search_html, re.S)
        search_style = '类型:' + search_style[a] + '\n'
        # 更新时间
        search_rule = r'<span class="result-game-item-info-tag-title preBold">更新时间:</span> +<span.*?>(.+?)</span>'
        search_date = re.findall(search_rule, search_html, re.S)
        search_date = '更新时间:' + search_date[a] + '\n'
        # 最新章节
        search_rule = r'<span class="result-game-item-info-tag-title preBold">最新章节:</span> +<a.*?href="(.*?)".*?>(.+?)</a>'
        search_new = re.findall(search_rule, search_html, re.S)
        search_new = '最新章节:' + search_new[a][1] + '\t' + search_new[a][0] + '\n'
        # 总结获取的所有内容
        search_content = search_title + search_info + search_user + search_style + search_date + search_new + '<——————————分隔符——————————>'
        print(search_content)
        a = a + 1

# 获取目录内容
def get_list(list_url):
    global list_content
    list_html = urllib.request.urlopen(list_url).read()
    list_html = list_html.decode('utf-8')
    list_rule = r'<dd><a href="(.+?)".*?>(.+?)</a></dd>'
    list_content = re.findall(list_rule, list_html, re.S)
    list_num = re.finditer(list_rule, list_html, re.S)
    list_rule = r'<dt>(.+?)</dt>'
    list_tittle = re.findall(list_rule, list_html, re.S)
    a = 0
    print(list_tittle[0])
    for i in list_num:
        content_tittle = list_content[a][1]
        content_link = 'https://www.xsbiquge.com' + list_content[a][0]
        print('[' + str(a + 1) + ']' + '\t' + content_tittle + '\t' + content_link)
        a = a + 1


# 获取文章内容
def get_content(content_url):
    html = urllib.request.urlopen(content_url).read()
    html = html.decode('utf-8')
    rule = r'<h1>(.*?)</h1>'
    tittle = re.findall(rule, html, re.S)
    tittle = tittle[0]
    rule = r'<div id="content">(.+?)</div>'
    content = re.findall(rule, html, re.S)
    content = content[0]
    content = tittle + '\n' + content
    content = re.sub(r'<', '<', str(content))
    content = re.sub(r'>', '>', str(content))
    content = re.sub(r' ', ' ', str(content))
    content = re.sub(r'<br />', '\n', str(content))
    print(content)


# https://www.xsbiquge.com/63_63448/
print('\n本爬虫暂时只适配了一个网站,即 https://www.xsbiquge.com/')
word = input('请输入搜索内容!')
search(word)
url = input('请输入目录链接!')
get_list(url)
content_Num = input('请输入[]内的数字预览章节内容!')
get_content('https://www.xsbiquge.com' + list_content[int(content_Num) - 1][0])


可能写的不好,但是我会努力优化,里面要是有什么错误,或者更简单的写法(希望回帖与我交流,咱是刚学一天Python的新手呐

免费评分

参与人数 11吾爱币 +9 热心值 +11 收起 理由
小佩奇 + 1 + 1 我很赞同!
dudupo + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
yantian007 + 1 + 1 谢谢@Thanks!
zishuna + 1 + 1 我很赞同!
ltz40 + 1 + 1 热心回复!
HopeTF + 1 + 1 谢谢@Thanks!
yjn866y + 1 + 1 我很赞同!
kingaero + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Put + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
我来白嫖 + 1 热心回复!
unbeaten + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

  • · 源码|主题: 47, 订阅: 1

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Anekys 发表于 2020-2-24 09:47
Leafmoes 发表于 2020-2-24 08:37
那种应该只是适合只需要某些类型的数据吧,比如只要数字或者只要字母之类的...(或者不官什么内容都可以 ...

不是特定类型的,有些地方就是专门研究这个正则表达式的,同样是网页中的这种数据就能很好的给匹配出来,据说是那种专门的正则表达式的效率要比这种标签定位的效率要高,同为正则表达式效率也有不一样的.
怎么解析书源?
 楼主| Leafmoes 发表于 2020-2-24 08:37
Anekys 发表于 2020-2-24 08:33
Emmm....只是我自己的一种形容词
你看你这个正则表达式里面开头和结尾都是网页源码里面的标签内容,方便 ...

那种应该只是适合只需要某些类型的数据吧,比如只要数字或者只要字母之类的...(或者不官什么内容都可以那样办到,但是直接通过标签定位不是更方便吗?(我打算通过解析书源来获取信息,这样太慢了
 楼主| Leafmoes 发表于 2020-2-23 23:04
其实觉得应该解析书源进行爬取,这样效率好像很低
pwp 发表于 2020-2-23 23:06
膜拜大佬
unbeaten 发表于 2020-2-23 23:13
学习了 最近刚好在学爬虫
chenmg 发表于 2020-2-23 23:19
我打算这次毕设就搞爬虫
pengtusheng 发表于 2020-2-23 23:31
不是多线程??
 楼主| Leafmoes 发表于 2020-2-23 23:37
本帖最后由 Leafmoes 于 2020-2-23 23:39 编辑

刚学习,对线程这一块还点乱.....(零基础...尝试的第一个python程序
kingaero 发表于 2020-2-23 23:44
感谢楼主,学习一下
yjn866y 发表于 2020-2-23 23:47
学习一天就能写出来,很棒的了
二诗的Adidas 发表于 2020-2-24 00:04
用python自带的那个idme运行可以吗
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-22 13:58

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表