内容选自韦玮著《精通 Python 网络爬虫——核心技术、框架与项目实战》P80

import requests

import re


def getContent(url, page):
    # 模拟成浏览器
    headers = {"User-Agent":
                   "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"}

    data = requests.get(url, headers=headers).text

    # 构建对应用户提取的正则表达式(非贪婪模式)
    user_pattern = '<h2>(.*?)</h2>'
    # 构建段子内容提取的正则表达式
    content_pattern = '<div class="content">(.*?)</div>'

    # 寻找出所有的用户
    user_list = re.compile(user_pattern, re.S).findall(data)
    # 寻找出所有的内容
    content_list = re.compile(content_pattern, re.S).findall(data)

    print("用户的数量", len(user_list))
    print("内容的数量", len(content_list))

    print("*" * 25)

    x = 1
    for content in content_list:
        content = content.replace("\n", "")
        # 用字符串作为一个变量名,先将对应的字符串赋给一个变量
        name = "content" + str(x)
        # 通过 exec() 函数实现用字符串作为变量并且复制
        exec(name + "=content")
        x += 1

    y = 1
    for user in user_list:
        user = user.replace("\n", "")
        name = "content" + str(y)
        print("用户(" + str(page) + "," + str(y) + ")是:" + user)
        print("内容是:")
        exec("print(" + name + ")")
        print("\n")
        y += 1
    print("-" * 100)


for i in range(1, 11):
    url = "https://www.qiushibaike.com/8hr/page/%s/" % str(i)
    print(url)
    getContent(url, i)

对代码的解释:
1、网页源代码的获取,如果使用 urllib.request 函数,则可以参考如下代码:

# 模拟成浏览器
headers = ("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 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")

2、url 链接其实我们可以多点几页,自己发现规律,这一点并没有什么技术含量;

3、exec 函数的作用是执行字符串形式的表达式, eval 函数的作用是执行字符串形式的代码。

Python 爬虫 —— 糗事百科爬虫实战_字符串

(1)eval(str [,globals [,locals ) 函数将字符串 str 当成有效 Python 表达式来求值,并返回计算结果;
(2)exec() 函数将字符串 str 当成有效的 Python 表达式来执行,不返回计算结果。