爬虫就是一个请求-解析-返回的过程,非常有意思。
跟着知乎大神一步步开始学习爬虫。https://zhuanlan.zhihu.com/p/29809609
从小说网站下载小说
《一念永恒》小说的第一章http://www.biqukan.net/book/23326/9979822.html
首先,获取HTML的信息。
编程test2.py:
import requests
if __name__ == '__main__':
target = 'http://www.biqukan.net/book/23326/9979822.html'
req = requests.get(url=target)
req.encoding='GB18030'
print(req.text)
其中,
req.encoding='GB18030'
是处理乱码。
可以和右击选择 '检查' 即可对照代码爬取是否正确(chrome)。
目标是提取正文,需要滤去一些冗余信息。第二步就是解析HTML的信息。选择 Beautiful Soup进行提取。
编程test3.py:
from bs4 import BeautifulSoup
import requests
if __name__ == "__main__":
target = 'http://www.biqukan.net/book/23326/9979822.html'
req = requests.get(url = target)
req.encoding='GB18030'
html = req.text
bf = BeautifulSoup(html,"lxml")
texts = bf.find_all('div', class_ = 'panel-body')
print(texts)
有结果:
接下来就是去除div标签名,br标签和一些空格。
编程test4.py,有:
from bs4 import BeautifulSoup
import requests
if __name__ == "__main__":
target = 'http://www.biqukan.net/book/23326/9979822.html'
req = requests.get(url = target)
req.encoding='GB18030'
html = req.text
bf = BeautifulSoup(html,"lxml")
texts = bf.find_all('div', class_ = 'panel-body')
print(texts[0].text.replace('\xa0'*8,'\n\n'))
运行后,有:
find_all匹配的返回的结果是一个列表。提取匹配结果后,使用text属性,提取文本内容,滤除br标签。随后使用replace方法,剔除空格,替换为回车进行分段。
在html中是用来表示空格的。replace('\xa0'*8,'\n\n')就是去掉下图的八个空格符号,并用回车代替。
target = 'http://www.biqukan.net/book/23326/9979822.html'
该行中,若把9979822改为9979823,即得到小说第2章的内容,要对HTML信息进行观察分类。
然后是要匹配目录,观察到
正文内容全部在目录下。
因此编程test5.py,有:
from bs4 import BeautifulSoup
import requests
if __name__ == "__main__":
target = 'http://www.biqukan.net/book/23326/'
req = requests.get(url = target)
req.encoding='GB18030'
html = req.text
div_bf = BeautifulSoup(html,"lxml")
div = div_bf.find_all('dd', class_ = 'col-md-3')
print(div)
注意对应的
div = div_bf.find_all('dd', class_ = 'col-md-3')
运行后,有:
因为从第1088章开始,所以起初以为结果是有问题的。但是在Pycharm中又是可以的。
问过作者后,
在cmd中运行,
结果是可以的。
今天就学了这么多,接下来要继续跟着大神走完实例,好好学习。