#Python学习(五)
##简单爬虫
今天我们来介绍一个利用Python进行爬虫的小项目,在起点中文网爬取免费小说并保存到文件中。
在这之前我们需要安装两个库:
requests
BeautifulSoup
具体安装方式就不再详细说明了,不懂的请参考我之前那篇使用pip安装库的文章。
首先我们需要获取网页HTML:
try:
r = requests.get(url,timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return ""
我们先来认识一下 try-except 这个语法,在这个语法中,先执行try下面的代码块,如果执行完毕没有发生错误则跳过excepy部分,直接进入后面的代码,如果发生了错误,则去执行except下面的代码块。
我们来认识一下requsts的主要函数和方法。
在第一句话中有一个参数为timeout = 30,这里是最大请求时间为30毫秒,如果在30毫秒内没有请求成功则停止访问,如果不加这个参数,访问错误也会继续访问下去,不会有任何返回提示。
在获取编码方式的语句中,有些时候网页获取可能会出现错误导致乱码,我们也可以自己进行查询来定义编码方式。
比如我们要爬取一篇小说
按F12打开网页源代码
在Network-Doc中可以看到页面的标签等数据
从这里可以看到网页的编码方式为UTF-8
在这个网页中所包含的信息是十分多的,但是我们只想要小说的文字内容,就需要将这些数据筛选出来。
可以发现这一行就是正文内容了,标签为
我们来提取这些数据。
html = getHTML(url)
soup = BeautifulSoup(html,'html.parser')
title = soup.select('div.span.content-wrap')
paras = soup.select('p')
return paras
select方法中参数就是需要的数据标签。
下面是标题的标签。
到这里为止我们就已经爬取完毕了,我们来看一下效果。
接下来我们只需要将这些数据保存到文件中,再修改一下格式。
f=open('pc.txt','w')
for t in text:
if len(t) > 0:
f.writelines(t.get_text() + "\n\n")
f.close()
如果出现获取编码失败的情况,我们还需要在’w’后面自己加上编码方式。
在前两部分中,我们还需要网页的url这一参数。在Header中我们可以很容易发现这些信息。
将三部分整合完善之后,我们来看一下效果。
我们发现虽然文章已经爬取下来了,但是前8行数据是多余的,所以我们需要去掉前8个标签
的数据。
paras = paras_tmp[8:]
这里就表示去掉前八个数据。
这样我们就全部完成了,我们来看看效果。
##以上就是本节的全部内容,后续内容会逐渐上传,相关源码也会统一上传,也可以到公众号私聊我要。
##不足之处请及时指出,相互学习