内容选自韦玮著《精通 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 函数的作用是执行字符串形式的代码。
(1)eval(str [,globals [,locals ) 函数将字符串 str 当成有效 Python 表达式来求值,并返回计算结果;
(2)exec() 函数将字符串 str 当成有效的 Python 表达式来执行,不返回计算结果。