注意:如果糗事百科网页代码结构发生变化那么上述代码中的URL以及网址的正则表达式也是需要改变的。
如有疑问可以留言 看到都会回复的说~
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/63.0.3239.84 Safari/537.36")
opener = urllib.request.build_opener()
opener.addheaders = [headers]
# 将opener安装为全局
urllib.request.install_opener(opener)
data = urllib.request.urlopen(url).read().decode("utf-8")
# 构建对应用户提取的正则表达式
userpat = '(.*?)
\n[\n # 存在匿名用户 所有需要两种条件
# 构建对应段子内容提取的正则表达式
contentpat = '\n(.*?)\n'
# 找出所有用户
# re.S 将“\n”当做一个普通的字符加入到这个字符串中,在整体中进行匹配
userlist = re.compile(userpat, re.S).findall(data)
# 找出所有内容
contentlist = re.compile(contentpat, re.S).findall(data)
x = 1
# 通过for循环遍历段子内容并将内容分别赋给对应的变量
for content in contentlist:
content = content.replace("\n", "")
# 用字符串作为变量名,现将对应字符串赋给一个变量
name = "content"+str(x)
# 通过exec()函数实现用字符串作为变量名并赋值
exec(name+'=content')
x += 1
y = 1
# 通过for循环遍历用户,并输出该用户对应的内容
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循环可以获取多页
for i in range(1, 3):
url = "https://www.qiushibaike.com/8hr/page/"+str(i)
getcontent(url, i)
注意:如果糗事百科网页代码结构发生变化那么上述代码中的URL以及网址的正则表达式也是需要改变的。
如有疑问可以留言 看到都会回复的说~