python3自己主动爬笑话

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python3自己主动爬笑话相关的知识,希望对你有一定的参考价值。

        学校的server能够上外网了,所以打算写一个自己主动爬取笑话并发到bbs的东西,从网上搜了一个笑话站点,感觉大部分还不太冷。html结构例如以下:

技术分享


        能够看到,笑话的链接列表都在<div class="list_title">里面,用正則表達式能够把近期的几个笑话地址找出来,再进到一个笑话页面看下:

技术分享


        每一个笑话页面里面是有多个小笑话组成的。所有在<span id="text110">标签下,每一个小笑话又单独一个<p>包裹,这样很easy就能够把每一个单独笑话放到一个list中。因为我爬笑话的目的是每天白天一个小时发一个笑话。所以爬取20个是足够的了,每一个页面平均有5个小笑话,爬4个页面就OK啦。

这里有几个细节。这个笑话网有的链接是有中文的,比方:

<a href="/jokehtml/冷笑话/2014051200030765.htm" target="_blank">读书破万卷,搞笑如有神</a>

直接urllib.request.urlopen函数不能解析中文的URL。必需要urllib.parse先转码一下才干正确解析。另一个细节是每段的小笑话之间是有换行的,用正則表達式的“.”是不能匹配换行符的,需要改成“[\w\W]”才干匹配。好了,以下是代码:

import urllib.request
import urllib.parse
import re

rule_joke=re.compile(‘<span id=\"text110\">([\w\W]*?)</span>‘)
rule_url=re.compile(‘<a href=\"(.*?)\"target=\"_blank\" >‘)
mainUrl=‘http://www.jokeji.cn‘
url=‘http://www.jokeji.cn/list.htm‘

req=urllib.request.urlopen(url)
html=req.read().decode(‘gbk‘)
urls=rule_url.findall(html)
f=open(‘joke.txt‘,‘w‘)
for i in range(4):
	url2=urllib.parse.quote(urls[i])
	joke_url=mainUrl+url2
	req2=urllib.request.urlopen(joke_url)
	html2=req2.read().decode(‘gbk‘)
	joke=rule_joke.findall(html2)
	jokes=joke[0].split(‘<P>‘)
	
	for i in jokes:
		i=i.replace(‘</P>‘,‘‘)
		i=i.replace(‘<BR>‘,‘‘)
		i=i[2:]
		f.write(i)
f.close()

看下爬取的结果:

技术分享


        这样,每行是一个单独的笑话。方便其它程序使用。


转载请注明:转自http://blog.csdn.net/littlethunder/article/details/25693641










以上是关于python3自己主动爬笑话的主要内容,如果未能解决你的问题,请参考以下文章

Scrapy1.4爬取笑话网站数据,Python3.5+Django2.0构建笑话应用

python3制作捧腹网段子页爬虫

Scrapy研究探索——自己主动爬取网页之II(CrawlSpider)

Android混合开发,html5自己主动更新爬过的坑

Python爬虫案例:利用Python爬取笑话网

scrapy按顺序启动多个爬虫代码片段(python3)