#思路
#1.请求抓取网页
#2.根据正则爬取关键内容
#3.解析出用户名和内容
#4.循环赋值进行输出
import urllib.request
import re
def getcontent(url,page):
headers=('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36')
opener=urllib.request.build_opener()
opener.addheaders=[headers]
urllib.request.install_opener(opener)
data=urllib.request.urlopen(url).read().decode('utf-8')
#构建对应用户提取的正则表达式 #存在匿名用户,所以需要两种条件
userpat='<h2>(.*?)</h2>\n[</a>\n<div class="articleGender|</span>\n<!--<div class="articleGender]'
#构建对应段子内容提取的正则表达式
contenpat='<div class="content">\n<span>(.*?)\n</span>'
#找到所有用户
userlist=re.compile(userpat,re.S).findall(data)
#找到所有内容
contenlist=re.compile(contenpat,re.S).findall(data)
x=1
#通过for循环遍历段子内容并将内容赋给对应的变量
for content in contenlist:
content=content.replace('\n','')
name="content"+str(x)
#通过exec()函数 实现用字符串作为变量名并赋值
exec(name+'=content')
x+=1
#通过for循环遍历用户,并输出用户对应的内容
y=1
for user in userlist:
user = user.replace('\n','')
name="content"+str(y)
print("用户"+str(page)+str(y)+"是:"+user)
print('内容是:')
exec("print(" + name + ")")
print('\n')
y+=1
#分别获取各页的段子
for i in range(1,5):
url='https://www.qiushibaike.com/8hr/page/'+str(i)
getcontent(url,i)
#exec()是Python的built-in函数。其作用很好描述,就是执行以string类型存储的Python代码。
爬虫:糗事百科
最新推荐文章于 2020-07-21 08:22:01 发布