「Python3爬虫」爬取糗事百科段子
教程:http://cuiqingcai.com/990.html
原帖 用python2写的
urllib2在python3中变成了urllib.request,一些函数也不太一样
大概意会一下写了个0.0
正则表达式是乱来的。。。
听从学长的建议用了format()来限制了字符串格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
__author__ = 'hzwer' # -*- coding: utf-8 -*- import re from urllib.request import * class Spider: def __init__(self): self.page = 1 # 记录访问的页码 self.user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.71 Safari/537.36r)' # 伪装浏览器君 self.headers = {'User-Agent': self.user_agent} self.stories = [] # 存储段子 def get_stories(self): try: url = 'http://www.qiushibaike.com/hot/page/' + str(self.page) request = Request(url, headers = self.headers) # 构建request self.page += 1 # 翻页 response = urlopen(request) content = response.read().decode("UTF-8").replace("<br/>", "\n") pattern = re.compile('alt="(.*?)".*?"content">\n(.*?)<!--(.*?)"number">(.*?)</i> 好笑', re.S) # 作者, 可能存在的图片信息, 内容, 赞数 self.stories = re.findall(pattern, content) # 正则表达式匹配 except URLError as e: if hasattr(e, "reason"): print ("获取失败,错误原因", e.reason) # 错误信息 return None def start(self): print ("{:^70}".format('正在读取糗事百科')) while True: self.get_stories() # 获取一页段子 for story in self.stories: # 遍历段子 if not re.search('img', story[2]): # 去除带图段子 Input = input("{:^70}".format('回车查看新段子, Q 键退出程序\n')) # 用户键入 if Input is 'Q' or Input is 'q': print ("{:^70}".format('再见')) return print ('{:^70}'.format('第{}页 作者:{} 赞数{}').format(self.page-1, story[0], story[3])) print ('{}\n'.format(story[1])) print ("{:^70}".format('翻个页 TwT')) spider = Spider() spider.start() |
分享一个我实现的糗事百科的爬虫源码:https://github.com/ShenJianShou/crawler_samples,欢迎来拍砖
http://cn.python-requests.org/zh_CN/latest/
https://beautifulsoup.readthedocs.org/zh_CN/latest/
其实黄学长可以参考requests库,比urllib好用到不知道哪里去了。
嗯~还有,网络应用的话用多线程有奇效~threading库
其实也无伤大雅~平时用这个查代码。。。
sudo apt-get install pep8
抛弃了pep8的黄学长!
我改了下。。。还有哪不符合pep8?
膜拜黄学长
学长 写篇NOIp考前指导文吧
快考试了 不知道干什么啊
漫无目的刷题。。。
准备省选 做cf,bzoj呗