赞
踩
这个小爬虫用三个模块,requests,parsel,还有re模块**
按照惯例,先导入模块:
import requests
import parsel
import re
然后就是伪装浏览器标识,网址之类的咯,这里我偷懒,直接定位到网站上这本小说的网址
url = “http://www.xpaoshuba.com/Partlist/61563/”
我个人比较爱看科幻类的小说,这里就随便拿本科幻小说举例
定义好了网址之后,接下来就是开始分析网址了:
response = requests.get(url)
responses = response.text
#print(responses)
写的时候分析网页内容用的
selector = parsel.Selector(responses)
novel_name = selector.css(‘#info h1::text’).get() #小说名
print(novel_name)
这里是分析网页的标签,小说的名字在h1标签内,所以直接定义标签,拿到小说的名字,我这习惯很差,顺手补一个小说名在运行框里的显示,方便自己看进度;
接下来就是去找小说章节名和单章节链接的标签了:
href = selector.css(‘#list dd a::attr(href)’).getall() #小说章节
这里可以看到,章节名和链接都可以直接用dd标签来找,我就偷一下懒哈,只抓取链接,因为章节名在后面的单张小说里面是有的;
抓取到的链接,我是喜欢用循环的方式来给它存起来,然后一个循环完成了一本书也抓取完了:
for link in href:
上面抓取到了章节链接,但是链接需要拼接才能用,这里咱们省点事,自己手动拼接吧:
link_url = ‘http://www.xpaoshuba.com’ + link
这里链接拼接好了,接下来还是老样子,请求一下链接,然后分析返回的内容:
response_1 = requests.get(link_url)
responses_1 = response_1.text
selecter_1 = parsel.Selector(responses_1)
分析内容了哈,这里主要就抓两个东西,一个是单张的内容,一个是标题:
title_name = selecter_1.css(‘.zhangjieming h1::text’).get() #小说章节
content_list = selecter_1.css(‘#content p::text’).getall() #小说内容
变量名啥的,自己怎么顺手怎么敲吧,但是这里要注意啊,小说的内容要进行str处理,再不然写不进文本档里,就是你的txt保存不了:
ck=str(content_list)
bk=ck.replace(“', '”,‘\n’)
去一下里面夹带的无意义字符;
接下来就是最终环节了,把爬下来的内容按小说章节顺序写到一个文本档里:
try:
with open(‘12.txt’, ‘a’) as f:
f.write(title_name)
f.write(‘\n’)
print(title_name)
f.write(bk)
except:
print(link_url + “出错了!”)
pass
这里用了try…excepet,是防止写入的时候报错,然后这个爬虫就崩了,单张写入报错,那就去盗版网址手机看一章嘛,哈哈哈哈哈哈。然后就是每一章的章节名后面,要加一个换行符,再不然没法看,所以这个’/n’的作用是换行,其他就无了。
下附完整代码:
import requests import parsel import re url = "http://www.xpaoshuba.com/Partlist/61563/" response = requests.get(url) responses = response.text #print(responses) selector = parsel.Selector(responses) novel_name = selector.css('#info h1::text').get() #小说名 print(novel_name) href = selector.css('#list dd a::attr(href)').getall() #小说章节 #print(href) for link in href: link_url = 'http://www.xpaoshuba.com' + link response_1 = requests.get(link_url) responses_1 = response_1.text selecter_1 = parsel.Selector(responses_1) title_name = selecter_1.css('.zhangjieming h1::text').get() #小说章节 content_list = selecter_1.css('#content p::text').getall() #小说内容 ck=str(content_list) bk=ck.replace("', '",'\n') #print(bk) try: with open('12.txt', 'a') as f: f.write(title_name) f.write('\n') print(title_name) f.write(bk) #print(ck) except: print(link_url + "出错了!") pass
爬小说还是简单的,甚至可以自己租个服务器弄个盗版网站,不过感觉意义不大并且容易出事,仅供娱乐,请勿用于牟利!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。