本文主要展示利用python3.7+urllib
实现一个简单无需登录爬取糗事百科段子实例。
本文将先展示全部源码,后面将逐步分析如何实现爬取糗事百科段子。
import urllib.request
import re
class QSBKCrawler:
User_Agent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0"
# 获取指定页面代码,进行连接程
def getPageCode(self, pageIndex):
# 1.设置头部
headers = {"User-Agent": QSBKCrawler.User_Agent}
# 2.设置request,用默认opener访问
request = urllib.request.Request("https://www.qiushibaike.com/text/page/" + str(pageIndex), headers=headers)
response = urllib.request.urlopen(request)
return response.read().decode("utf-8")
# 处理页面代码,获取想要的信息
def getStroies(self, pageCode):
# 1.获取初步匹配信息
pattern = re.compile('.*?(.*?)
' +# 作者
'.*?\n(.*?)' + # 内容
'.*?.*?(.*?)' , # 笑脸
re.S)
items = re.findall(pattern, pageCode)
# 2.进行一些信息处理,去除空格等
pageStroies = [] # 设置列表来存储信息
for item in items:
removeSpace = re.compile('\n|\n\n|\n\n\n')
repalceBR = re.compile('
|
')
# ①去除作者名和内容的空格
authors = re.sub(removeSpace, "", item[0])
text = re.sub(removeSpace, "", item[1])
# ②替换<\br>为空格
text = re.sub(repalceBR, "\n", text)
# ③将处理好的信息加入pageStroies列表
pageStroies.append([authors, text, item[2]]) # 注意:pageStroies是一个列表,每一项又存储了一个列表
return pageStroies
# 调用实现爬取
crawler = QSBKCrawler()
pageCode = crawler.getPageCode(1)
pageStroies = crawler.getStroies(pageCode)
for p in pageStroies:
print("作者名:{0} 赞同数:{1} \n {2}\n".format(p[0], p[2], p[1]))
python爬虫获取网页源码需引用urllib.request
,一个简单的获取网页源码实例如下:
User_Agent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0"
# 获取指定页面代码,进行连接程序
def getPageCode(self, pageIndex):
# 1.设置头部
headers = {"User-Agent": QSBKCrawler.User_Agent}
# 2.设置request,用默认opener访问
request = urllib.request.Request("https://www.qiushibaike.com/text/page/" + str(pageIndex), headers=headers)
response = urllib.request.urlopen(request)
# print(response.read().decode("utf-8")) #打印测试,注意要进行转码到utf-8
return response.read().decode("utf-8")
urllib.request.Request
原型:
class urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
在这里我们只用到url
和headers
参数,date参数会在下一个爬虫实战遇到,暂且不提。其他参数一般采用默认,如果想知道关于他们的更多信息, 请点击这里。
url
即资源地址定位符,我们要爬取糗事百科的段子,分析它的网址:
https
是超文本安全传输协议
www.qiushibaike.com/text/
定位到糗事百科文字段子页面
page/2/
定位到具体第几页
headers
参数主要是为了伪装成浏览器进行访问,firefox浏览器获取其参数:打开网址,按下F12---->点击网络,选定下面任意一栏,可以在右侧最下方查看User-Agent
。
至此,我们就只需要调用 urllib.request.Request
方法设置好url
和headers
,然后将其传入urllib.request.urlopen
就可以直接获取到网页源码了。如果将源码打印print
出来:
获取了源码,对源码进行分析提取段子自然用正则表达式是最方便的,引用库为re
,对正则表达式不太了解的同学可点击这里。好了,废话不多说,我们且来看如何一步步做到提取段子出来。