根据别人写的教程学习的 由于现在糗事百科那个代码进行了修改 原来使用的正则表达式不适用了自己重新写的正则表达式 可以爬取热门段子的作者 内容 发布时间 赞数
<span style="font-family:KaiTi_GB2312;font-size:18px;">#__author youngkl
# -*- coding:utf-8 -*-
import urllib
import urllib2
import re
page = 1
url = 'http://www.qiushibaike.com/hot/page/' + str(page)
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('<div.*?class="author.*?>.*?<a.*?</a>.*?<a.*?>(.*?)</a>.*?<div.*?class'+'="content".*?title="(.*?)">(.*?)</div>(.*?)<div class="stats.*?class="number">(.*?)</i>',re.s)
pattern=re.compile(r'<div.*?class="author".*?>.*?\n<a.*?>\n<img.*?src=.*?/>(.*?)</a>\n</div>\n.*?<div.*?class="content".*?>\n+(.*?)\n<!--(.*?)-->\n+</div>\n.*?<div.*?class="stats.*?class="number">(.*?)</i>',re.S)
# pattern = re.compile(r'<div.*?class="author".*?>.*?\n<a.*?>\n<img.*?src="(.*?)".*?alt="(.*?)".*?/>\n</a>\n<a.*?>(.*?).*?</a>\n</div>\n+<div.*?class="content".*?>\n+(.*?)\n<!--(.*?)-->\n+</div>\n+[\s\S]*?<div.*?class="stats">\n<span.*?><i.*?>(.*?)</i>.*?</span>',re.S)
items=re.findall(pattern,content)
# print page
for item in items:
print item[0],item[1],item[2],item[3]
# ,item[1],item[2],item[3],item[4]
# print response.read()
except urllib2.URLError, e:
if hasattr(e,"code"):
print e.code
if hasattr(e,"reason"):
print e.reason</span>