Python爬虫实战(2)-爬取小说"斗罗大陆3龙王传说”(超详细)

秦子帅 / 文 发表于2018-05-15 08:43 次阅读 豆瓣音乐,python爬虫

前言

首先,我们来回忆一下上篇爬虫实战讲了什么:讲到了requests和bs4和一些网页基本操作。如果有不熟悉的朋友可以去看看:

Python爬虫实战(1)-爬取“房天下”租房信息(超详细)

今天我们用re模块+requests来实战爬取一下,并写入TXT文件中,效果图如下:

image

实战

我们今天来爬取一下5200小说网的小说“罗大陆3龙王传说”并写入TXT文件中,我们先分析一下章节网址的规律:

http://www.5200xs.org/52002847/1081834.html

http://www.5200xs.org/52002847/1081835.html

从而得知规律是网址数字的增加。

步骤:

1.先获取网页数据,用requests获取,这个大家都会吧?上篇实战文章已经讲过了,这里的url我们一会再赋值:


import  requests

def get_data(url):
   headers = {
       'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36'}

   data = requests.get(url,headers=headers)
   # 因为直接请求出来的是乱码,所有设置一下编码格式
   data.encoding = "gbk"
   print(data.text)

2.根据re模块去提取你想要的信息-标题和内容

首先先讲一下符号 (.?)的用法,就是表示匹配xx和xx间的任何字符。用法就是‘xx(.?)xx’

标题:

获取代码:


title&#160;= re.findall('<h1>(.*?)</h1>', data.text, re.S)

内容:

image

获取代码:


content&#160;= re.findall('<div id="content">(.*?)</div>', data.text, re.S)

获取之后会有各种的符号,我们可以把它代替出来:


if&#160;content.__len__()>0:
&#160; &#160; &#160; &#160; &#160; &#160;str = content[0].replace("&nbsp;&nbsp;&nbsp;&nbsp;",&#160;"").replace("<br />",&#160;"")

3.就是通过循环依次获取当前的网页数据,并写入TXT文件中。

完整代码如下:


import&#160;&#160;requests
import&#160;&#160;re
#创建TXT文件,其中的"a+"是一种模式,表示用于读写,追加模式。
f = open("C:/Users/Administrator/Desktop/qi.txt","a+")

def&#160;get_data(url):
&#160; &#160;headers = {
&#160; &#160; &#160; &#160;'User-Agent':&#160;'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36'}

&#160; &#160;data = requests.get(url,headers=headers)
&#160; &#160;# 因为直接请求出来的是乱码,所有设置一下编码格式
&#160; &#160;data.encoding =&#160;"gbk"
&#160; &#160;&#160;#获取网页数据成功
&#160; &#160;if&#160;data.status_code==200:

&#160; &#160; &#160; &#160;title = re.findall('<h1>(.*?)</h1>', data.text, re.S) &#160; &#160;&#160;#标题
&#160; &#160; &#160; &#160;content = re.findall('<div id="content">(.*?)</div>', data.text, re.S) &#160; &#160;&#160;#内容
&#160; &#160; &#160; &#160;if&#160;content.__len__()>0&#160;and&#160;title.__len__()>0:
&#160; &#160; &#160; &#160; &#160; &#160;str =title[0]+"nn"+ &#160;content[0].replace("&nbsp;&nbsp;&nbsp;&nbsp;",&#160;"").replace("<br />",&#160;"") &#160; &#160;&#160;#标题和内容拼在一起
&#160; &#160; &#160; &#160; &#160; &#160;f.write(str) &#160; &#160;&#160;#写入TXT
&#160; &#160;#获取失败
&#160; &#160;else:
&#160; &#160; &#160; &#160;pass

if&#160;__name__ ==&#160;'__main__':
&#160; &#160;#这里为了给大家演示,只是取了前一百章
&#160; &#160;urls = ["http://www.5200xs.org/52002847/{}.html".format(str(i))&#160;for&#160;i&#160;in&#160;range(1081834,&#160;1081933)]
&#160; &#160;for&#160;i&#160;in&#160;urls:
&#160; &#160; &#160; &#160;get_data(i)
&#160; &#160;f.close()

希望对刚入门的朋友有所帮助!


收藏 赞 (0) 踩 (0)