问题导读:
抓取糗事百科段子,作者、作者性别、段子内容、筛选无图段子
解决方案:
#!/usr/bin/env python
# coding=utf-8
import urllib2
import re
# 爬虫
class qsbk_spider:
#初始化
def __init__(self):
self.pageIndex = 1
self.headers = { 'User-Agent':'Mozilla/5.0 (X11; Linux x86_64; rv:49.0) Gecko/20100101 Firefox/49.0' }
# 段子
self.stories = []
# 程序运行标量
self.enable = False
# 通过索引获得页面html
def getPageByIndex(self, pageIndex):
try:
url = 'http://www.qiushibaike.com/hot/page/' + str(pageIndex)
# 构建Request 请求
request = urllib2.Request(url,headers = self.headers)
# 得到html
response = urllib2.urlopen(request)
# 转码
page_html = response.read().decode('utf-8')
return page_html
except urllib2.URLError, e:
if hasattr(e,'reason'):
print u'连接失败,错误:',e.reason
return None
# 通过html页面,返回不带img的段子列表
def getPageExceptImg(self, pageIndex):
page_html = self.getPageByIndex(pageIndex)
if not page_html:
print '页面加载失败!'
return None
pattern = re.compile(r'<h2>(.*?)</h2>.*?</a(.*?)<span>(.*?)</span>.*?</div.*?</a(.*?)class="stats">', re.S)
items = re.findall(pattern,page_html)
# 保存页面的列表
page_storie = []
# 遍历匹配到item
for item in items:
# 没有img
if not re.search('img',item[3]):
if re.search('manIcon',item[1]):
a_sex = '(男孩)'
else:
a_sex = '(女孩)'
# 替换<br/> 标签
'''
compile:
把正则表达式的模式和标识转化成正则表达式对象,供函数使用。
'''
replaceBR = re.compile('<br/>')
text = re.sub(replaceBR,'\n',item[2])
# a_sex 是作者性别,将它存入列表时要解码
page_storie.append([item[0].strip(),a_sex.decode('utf-8'),text.strip()])
return page_storie
# 输入页数,得到每一页的段子
def getStories(self):
start = input('开始页:')
end = input('结束页:')
while(start <= end):
print start,
self.stories.append(self.getPageExceptImg(self.pageIndex))
start += 1
# 写入 ./qb_file.txt
def writeToFile(self):
print '保存中---',
qb_file = open('./qb_file.txt','w')
for story in self.stories:
for s in story:
qb_file.write('作者:' + s[0].encode("utf-8") + s[1].encode("utf-8") + '\n' + '段子:' + s[2].encode("utf-8") + '\n')
qb_file.close()
print '已保存!'
# 开始
def start(self):
self.getStories()
self.writeToFile()
#开始
if __name__ == "__main__":
spider = qsbk_spider()
spider.start()
作者:逆风的单车(男孩)
段子:前段时间,主管找到我,偷偷对我说“小x你工作表现的不错,工资准备给你涨三百,这事你千万不能告诉别人”我感激涕零,直到聚餐的时候,主管喝多了,拉着我的手“小x,我对不住你,其实别人都涨了六百,怕你想不开,就没和你说实话!”卧槽!!!
作者:告诉静静说我想她(男孩)
段子:买了一个小蛋糕(真的很小),上面有一朵花,花边一颗草。那草做的那个精致啊,真像真的。吃下去,我草,是真的!
作者:海贼--王路飞(男孩)
段子:一同事单身,周末洗了一堆衣服,发朋友圈说累死了,真得找个媳妇!数位已婚男同胞回复:洗的少了不过瘾?
作者:爱上你却输了骄傲(女孩)
段子:LZ是朋友圈里有名的红娘,介绍了三对,都成功了,之后好多人纷纷都找我介绍。自从去年那三对都离婚了之后,整个世界就安静了……并送我一个外号“婚姻中转站站长”
作者:专业^O^丰胸(男孩)
段子:二货的朋友伤不起。在广场上打赌,一朋友输了,罚他和大妈们跳广场舞。各种不愿意,扭捏之后就去跳了。然后跳的嗨了,拉都拉不走!!服了~