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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl0dGxldGh1bmRlcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl0dGxldGh1bmRlcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

每一个笑话页面里面是有多个小笑话组成的。所有在<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自己主动爬笑话的更多相关文章

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

    原创,转载注明:http://blog.csdn.net/u012150179/article/details/34913315 一.目的. 在教程(二)(http://blog.csdn.net/u ...

  2. python3使用requests爬取新浪热门微博

    微博登录的实现代码来源:https://gist.github.com/mrluanma/3621775 相关环境 使用的python3.4,发现配置好环境后可以直接使用pip easy_instal ...

  3. python3.4+pyspider爬58同城(二)

    之前使用python3.4+selenium实现了爬58同城的详细信息,这次用pyspider实现,网上搜了下,目前比较流行的爬虫框架就是pyspider和scrapy,但是scrapy不支持pyth ...

  4. Python3.6+Scrapy爬取知名技术文章网站

    爬取分析 伯乐在线已经提供了所有文章的接口,还有下一页的接口,所有我们可以直接爬取一页,再翻页爬. 环境搭建 Windows下安装Python: http://www.cnblogs.com/0bug ...

  5. python3+selenium3+requests爬取我的博客粉丝的名称

    爬取目标 1.本次代码是在python3上运行通过的 selenium3 +firefox59.0.1(最新) BeautifulSoup requests 2.爬取目标网站,我的博客:https:/ ...

  6. python3 爬虫之爬取安居客二手房资讯(第一版)

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- # Author;Tsukasa import requests from bs4 import Beau ...

  7. 【Python3爬虫】爬取美女图新姿势--Redis分布式爬虫初体验

    一.写在前面 之前写的爬虫都是单机爬虫,还没有尝试过分布式爬虫,这次就是一个分布式爬虫的初体验.所谓分布式爬虫,就是要用多台电脑同时爬取数据,相比于单机爬虫,分布式爬虫的爬取速度更快,也能更好地应对I ...

  8. python3.4+selenium爬58同城(一)

    爬取http://bj.58.com/pbdn/0/pn2/中除转转.推广商品以外的产品信息,因为转转和推广的详情信息不规范,需要另外写一个方法存放,后期补上,详情页如下 这周学习了爬虫,但是遇到一些 ...

  9. Python3.5:爬取网站上电影数据

    首先我们导入几个pyhton3的库: from urllib import requestimport urllibfrom html.parser import HTMLParser 在Python ...

随机推荐

  1. ECharts问题--散点图中对散点添加点击事件

    1. 我们这次就没有先讲解怎么使用散点图了,这个跟之前的一些图还是很类似的,不会的可以去官网上面查看 API 使用.我们这次讲解的是为散点图中的散点添加点击事件,然后在图表之外的一个 div 里面显示 ...

  2. Log4Net的控制台,WinForm,WebApplication使用

    一.Log4Net的控制台,WinForm,WebApplication使用 1.首先使用nuget 添加log4Net 到控制台项目中 log4j每个符号的具体含义:%d %5p %c{1}:%L ...

  3. [设计模式-行为型]观察者模式(Observer)

    一句话 事件监听就是观察者模式最好的例子. 概括

  4. hdu 2196(方法1:经典树形DP+方法2:树的直径)

    Computer Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  5. 使用threadpool并发测试,报错HTTPConnectionPool Max retires exceeded

    解决方法:和以下答案一致 https://blog.csdn.net/qq_21405949/article/details/79363084 场景: 在做爬虫项目或者是在发送网络请求的时候,一般都会 ...

  6. HDU 2553 N皇后问题【棋盘型DFS】

    N皇后问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  7. NOIP2018提高组模拟题(六)

    购物(shop) Description 小林来到商店中进行购物.商店里一共有 n 件物品,第 i 件物品的价格为 a[i] 元.小林总共需要购买 m 件物品,他希望他所花费的钱最少,请你计算出最小 ...

  8. POJ 3537:Crosses and Crosses(Multi-Nim)

    [题目链接] http://poj.org/problem?id=3537 [题目大意] 在一个1*n的方格纸上下棋,谁先连三子谁就赢了,问必胜的是谁. [题解] 我们发现对于一个n规模的游戏.在i位 ...

  9. [Contest20180316]Mythological IV

    令$S(n)=\sum\limits_{i=0}^{n-1}f(i)q^i$,那么存在一个次数$\leq k$的多项式使得$S(n)=q^ng(n)-g(0)$(证明来自杜教的PPT) 设$f$的次数 ...

  10. 【二分】bzoj2083 [Poi2010]Intelligence test

    v[x]记录了x值的出现位置序列. 对每个b中的元素,每次在v[b[i]]中二分. 因此要记录上一次二分到了a数组的哪个位置. #include<cstdio> #include<v ...