...
前面我们已经说了那么多基础知识了,下面我们做个实战项目来挑战一下吧。这次就用前面学的urllib和正则表达式来做,Python爬虫爬取糗事百科的小段子。
爬取前我们先看一下我们的目标:
1.抓取糗事百科热门段子
2.过滤带有图片的段子
3.段子的发布人,段子内容,好笑数,评论数
首先我们确定好页面的URL,糗事百科的网址是:http://www.qiushibaike.com,但是这个URL不方便我们后面连续抓取,我们可以看一下第二页就知道URL如何构造了,URL是 http://www.qiushibaike.com/8hr/page/1/?s=4872200,其中中间的数字1代表页数,我们可以传入不同的值来获得某一页的段子内容,其他的部分是不变的。
我们先看看最基本的页面抓取方式,看看会不会成功
import urllib2
page=1
url = 'http://www.qiushibaike.com/8hr/page/'+str(page)+'/?s=4872200'
try:
request = urllib2.Request(url)
response = urllib2.urlopen(request)
print response.read()
except urllib2.URLError, e:
if hasattr(e,"code"):
print e.code
if hasattr(e,"reason"):
print e.reason
import urllib2
page=1
url = 'http://www.qiushibaike.com/8hr/page/'+str(page)+'/?s=4872200'
user_agent ='Mozilla/4.0(compatible;MSIE 5.5;Windows NT)'
headers={'User-Agent':user_agent}
try:
request = urllib2.Request(url,headers = headers)
response = urllib2.urlopen(request)
print response.read()
except urllib2.URLError, e:
if hasattr(e,"code"):
print e.code
if hasattr(e,"reason"):
print e.reason
2、用正则表达式提取段子
我们先看审查元素,看一下代码,如下图:
每个段子都在一个盒子里,
content = response.read().decode('utf-8')
pattern = re.compile('.*?.*?.*?.*?(.*?)
.*?content">'+
'(.*?)
# _*_ coding:utf-8 _*_
import urllib2
import re
page=1
print u"第%d页"%page
while page < 10:
url = 'http://www.qiushibaike.com/8hr/page/' + str(page) + '/?s=4872200'
user_agent ='Mozilla/4.0(compatible;MSIE 5.5;Windows NT)'
headers={'User-Agent':user_agent}
try:
request = urllib2.Request(url,headers = headers)
response = urllib2.urlopen(request)
content = response.read().decode('utf-8')
pattern = re.compile('.*?.*?.*?.*?(.*?)
.*?content">' +
'(.*?)