丩豪丩 发表于 2019-11-25 10:27

python爬取龙王传说小说

最近在学习python,想相互讨论讨论,小白贴,高手可以不用看了:lol
因为本人平时喜欢看小说,所以学爬虫的时候首先想到的就是爬小说网站
要爬取的网址:https://www.bxwxorg.com/read/42/
首先分析第一章和第二章,在chrome浏览器页面检查

发现章节规律仅仅是一个数字偏移量的区别 https://www.bxwxorg.com/read/42/865676.html,https://www.bxwxorg.com/read/42/865677.html
接下来则是分析章节的内容

发现章节内容都是在p节点里面,所以利用BeautifulSoup很方便的获取整个章节的文字内容,然后保存成txt文件则完成了当前章节的爬取,由于不同章节只是一个偏移量的区别,所以只要我们做一个for循环则很方便的获取到所有的章节信息了,最后爬取完成之后发现头尾有些不想要的内容“www.bxwxorg.comNoneNone”,“喜欢斗罗大陆III龙王传说请大家收藏:(www.bxwxorg.com)斗罗大陆III龙王传说笔下文学更新速度最快。NoneNoneNoneNone 本站所有小说为转载作品,所有章节均由网友上传,转载至本站只是为了宣传本书让更多读者欣赏。None”,我是直接用字符串的方法来去头去尾了,估计有更好的方法我不知道,毕竟是个初学者,有些便捷的方法可能还不知道。
以下是我写的代码,功能可以实现了,但是我知道的都还有很多可以优化的地方,但不打算优化了,毕竟只是一个学习过程中的小程序而已,希望能对同样在学习的人有帮助吧。
以下为代码:

import requests
from bs4 import BeautifulSoup
import re

def down_one_page(url):
    headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36'
    }
    respond = requests.get(url,headers=headers)
    if(respond.status_code == 200):
      return respond.content.decode()
    return 'err'

print('龙王传说下载1-1984\n')
begin = int(input('开始章节: '))
end = int(input('结束章节: ')) + 1

text = ''
#循环爬取各个章节
for i in range(begin,end):
    url = 'https://www.bxwxorg.com/read/42/' + str(i+865675) + '.html'
    html = down_one_page(url)

#获取章节正文内容
    soup = BeautifulSoup(html,'lxml')
    results = soup.find_all(name = 'p')
    for result in results:
      text += str(result.string)

#去除头尾不想要的字符串
    text = text.lstrip('www.bxwxorg.comNoneNone')
    text = text.rstrip('喜欢斗罗大陆III龙王传说请大家收藏:(www.bxwxorg.com)斗罗大陆III龙王传说笔下文学更新速度最快。NoneNoneNoneNone 本站所有小说为转载作品,所有章节均由网友上传,转载至本站只是为了宣传本书让更多读者欣赏。None')

#用正则方式取章节名
    name = re.findall('.*&gt; (.*?)<script>textsel',html,re.S)
    with open(name+'.txt','w') as f:
      f.write(text)
#输出完成进度
    print('完成 '+ name)
    text = ''


源代码和封装好的exe放到百度网盘里,需要的自取
链接:https://pan.baidu.com/s/1M5xMfBNg5-QdHlpFBc_-Wg
提取码:3dtb
不知道为什么封装出来的exe会报毒,但实际上是没有病毒的,添加一下信任即可,或者自己用源代码来封装也行。

念所不及 发表于 2019-11-25 22:03

Traceback (most recent call last):
File "D:\Python\lib\requests\__init__.py", line 55, in <module>
    assert minor <= 22
AssertionError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "G:\python\lwcs\lwcs.py", line 1, in <module>
    import requests
File "D:\Python\lib\requests\__init__.py", line 57, in <module>
    raise RuntimeError('Requests dependency \'urllib3\' must be version >= 1.21.1, < 1.22!')
RuntimeError: Requests dependency 'urllib3' must be version >= 1.21.1, < 1.22!

丩豪丩 发表于 2019-11-25 13:52

hfxiang 发表于 2019-11-25 11:04
源码测试出错:
bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: l ...

帮你查了一下,他们说是这个问题,具体你可以试试,我用的是python3.7

https://blog.csdn.net/qq_34215281/article/details/77714584

yhtg 发表于 2019-11-25 10:47

收藏了,我也在自学,下班研究研究

hfxiang 发表于 2019-11-25 11:04

源码测试出错:
bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: lxml. Do you need to install a parser library?

丩豪丩 发表于 2019-11-25 11:50

本帖最后由 丩豪丩 于 2019-11-25 11:51 编辑

hfxiang 发表于 2019-11-25 11:04
源码测试出错:
bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: l ...
你是没有安装BeautifulSoup的库吧?pip install beautifulsoup4

念所不及 发表于 2019-11-25 15:11

File "C:\Users\Administrator\Desktop\lwcs\lwcs.py", line 1, in <module>
    import requests
ModuleNotFoundError: No module named 'requests'测试代码爆了这个错误 原因是少了这个模块 各位大佬解释一下

hfxiang 发表于 2019-11-25 17:04

丩豪丩 发表于 2019-11-25 13:52
帮你查了一下,他们说是这个问题,具体你可以试试,我用的是python3.7

https://blog.csdn.net/qq_3421 ...

正解{:1_921:}
我的也是3.7,你这个方法已让我解决了问题,谢谢{:1_893:}

Unn 发表于 2019-11-25 22:26

在自学,尝试尝试:lol:lol

MOEYU_VANILLA 发表于 2019-11-26 00:01

感谢分享
页: [1] 2
查看完整版本: python爬取龙王传说小说