您的位置:首页 > 编程语言 > Python开发

Python爬虫入门——2. 5 爬取斗破苍穹并保存到本地TXT

2018-11-12 15:00 288 查看

        这次我们爬取斗破苍穹http://www.doupoxs.com/doupocangqiong/的全部文字,并保存到本地TXT。

        话不多说,上代码:

[code]#导入requests库
import requests
#导入 re 库
#导入时间模块
import time
import re
#定义请求头,请求头可以使爬虫伪装成浏览器
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'}
#定义连接网络的列表
url_list = ['http://www.doupoxs.com/doupocangqiong/{}.html'.format(str(i)) for i in range(2,1665) ]

#函数主体
with open('F:/exercise/斗破苍穹.txt', 'w') as f:
for url in url_list:
html = requests.get(url, headers = headers)
#如果status_code = 200, 说明网页相应成功
if html.status_code == 200:
#利用正则表达式获取内容
contents = re.findall('<p>(.*?)</p>', html.content.decode('utf-8'), re.S)
#将内容写入到本地txt文档

f.write('\n\n')
for content in contents:
f.write(content+'\n')
else:
pass
time.sleep(0.5)

 首先我们要做的,依旧是观察目标网页的URL,斗破苍穹第一页http://www.doupoxs.com/doupocangqiong/2.html,第二页为

http://www.doupoxs.com/doupocangqiong/5.html,第三页为http://www.doupoxs.com/doupocangqiong/6.html,第四页为http://www.doupoxs.com/doupocangqiong/7.html。经过分析,第一页与第二页没有明显的规律,但是第二页往后规律就很明显了。我们依然可以构造网页http://www.doupoxs.com/doupocangqiong/{0}.html样式的url列表,但是  {}  里面为3,4的时候网页出现404,这该怎么办?这就需要我们来判断返回的status_cord了,如果返回200,则说明连接成功,否则相应失败。

现在来分析代码:

1.导入requests库、time模块、re 模块、定义请求头

2.构造ur连接列表http://www.doupoxs.com/doupocangqiong/ {  }.html  区间为[2,1665) 左闭右开,其中3,4网页为404

3.在本地创建一个TXT文件,命名为  ”斗破苍穹.txt“  。利用with 语句来进行文件的  写  操作。

    3.1利用 with 语句 打开 open 路径为  “F:/exercise/斗破苍穹.txt”的文件,“w”为写操作。

    3.2利用 for 循环读入  URL  ,利用requests读取网页内容

    3.3.判断是否成功连接网页,如果成功连接网页则:

        3.3.1利用正则表达式获取文章内容。注意,我们获得的是非utf-8编码,因此在这里我们多了一个步骤,就是将获取到的内容转换为utf-8编码。你可以将  html.content.decode('utf-8) 更换为 html.text  打印一小部分内容观察一下。

        3.3.2在文本写入两行空格,用来区分章节。

        3.3.3循环读入获取到的内容,将其写入文本中

    3.4如果连接失败,那么就pass吊此次循环,进入下一个循环。

    3.5让程序休息0.5秒,防止一直在运行,频率过高从而导致爬虫失败。

 

文件操作:

    打开文件进行操作之后需要将打开的文件关闭。否则会一直占用资源。但有时程序出现问题,导致打开的文件不能正常关闭,所以我们会用 try... finally来进行文件的操作。但是这样未免显得繁琐。所以 Python引入了 with 语句来自动关闭 close 文件。用法是 with open(“path”,‘identifier’)as f 其中path指的是文件的路径,包括文件名;‘identifier’ 是标识符,表示的是对文件进行何种操作: ‘r' 表示读文件: ’w' 表示写文件: ‘rb’ 表示读取二进制文件(比如图片,视频等)。

下图为成功读取保存的《斗破苍穹》文本文档:

 

 

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐