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

Posted huohuohuo1

tags:

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

   学校的服务器可以上外网了,所以打算写一个自动爬取笑话并发到bbs的东西,从网上搜了一个笑话网站,感觉大部分还不太冷,html结构如下:技术分享图片

 可以看到,笑话的链接列表都在<div class="list_title">里面,用正则表达式可以把最近的几个笑话地址找出来,再进到一个笑话页面看下:技术分享图片

  每一个笑话页面里面是有多个小笑话组成的,全部在<span id="text110">标签下,每个小笑话又单独一个<p>包裹,这样非常容易就可以把每个单独笑话放到一个list中。由于我爬笑话的目的是每天白天一个小时发一个笑话,所以爬取20个是足够的了,每个页面平均有5个小笑话,爬4个页面就OK啦。这里有几个细节,这个笑话网有的链接是有中文的,比如:

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

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

 1 import urllib.request  
 2 import urllib.parse  
 3 import re  
 4   
 5 rule_joke=re.compile(<span id=\\"text110\\">([\\w\\W]*?)</span>)  
 6 rule_url=re.compile(<a href=\\"(.*?)\\"target=\\"_blank\\" >)  
 7 mainUrl=http://www.jokeji.cn  
 8 url=http://www.jokeji.cn/list.htm  
 9   
10 req=urllib.request.urlopen(url)  
11 html=req.read().decode(gbk)  
12 urls=rule_url.findall(html)  
13 f=open(joke.txt,w)  
14 for i in range(4):  
15     url2=urllib.parse.quote(urls[i])  
16     joke_url=mainUrl+url2  
17     req2=urllib.request.urlopen(joke_url)  
18     html2=req2.read().decode(gbk)  
19     joke=rule_joke.findall(html2)  
20     jokes=joke[0].split(<P>)  
21       
22     for i in jokes:  
23         i=i.replace(</P>,‘‘)  
24         i=i.replace(<BR>,‘‘)  
25         i=i[2:]  
26         f.write(i)  
27 f.close()  

看下爬取的结果:

技术分享图片

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

以上是关于Python爬虫案例:利用Python爬取笑话网的主要内容,如果未能解决你的问题,请参考以下文章

朴素贝叶斯趣味挑战项目

Python 爬虫多线程爬取

Python爬取笑话存储在mysql里

利用Python爬虫获取招聘网站职位信息

利用Python爬虫爬取淘宝网某类商品的图片

python爬虫案例-乌托家家具公司数据爬取