您的位置:首页 > 编程语言 > Python开发

10Python爬虫---爬虫实战之糗事百科段子

2018-01-30 13:59 295 查看
目的:获取糗事百科段子



思路:

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 = '<h2>(.*?)</h2>\n[</a>\n<div class="articleGender|</span>\n<!-- <div class="articleGender]'  # 存在匿名用户  所有需要两种条件
# 构建对应段子内容提取的正则表达式
contentpat = '<div class="content">\n<span>(.*?)\n</span>'
# 找出所有用户
# 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以及网址的正则表达式也是需要改变的。

如有疑问可以留言 看到都会回复的说~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: