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

目的:获取糗事百科段子
10Python爬虫---爬虫实战之糗事百科段子_第1张图片
思路:

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)

结果:
10Python爬虫---爬虫实战之糗事百科段子_第2张图片

注意:如果糗事百科网页代码结构发生变化那么上述代码中的URL以及网址的正则表达式也是需要改变的。
如有疑问可以留言 看到都会回复的说~

你可能感兴趣的:(python爬虫,Python,正则表达式)