Python 爬虫 —— 糗事百科爬虫实战

内容选自韦玮著《精通 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 = '

(.*?)

'
# 构建段子内容提取的正则表达式 content_pattern = '
(.*?)
'
# 寻找出所有的用户 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张图片

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

你可能感兴趣的:(python)