思路如下:
(1)分析各页间的网址规律,通过for循环实现多页内容的爬取
(2)构建一个函数,用来获取用户和内容
注意:
程序中用到了exec()函数,exec()函数就是执行储存在字符串或文件中的Python语句。在通过for循环中遍历段子内容分别赋值给对应遍历,变量名是有规律的,格式为:content+顺序号
程序
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/72.0.3626.121 Safari/537.36")
opener = urllib.request.build_opener()
opener.addheaders = [headers]
urllib.request.install_opener(opener)
data = urllib.request.urlopen(url).read().decode("utf-8")
# .*? 是一个固定的搭配,.和*代表可以匹配任意无限多个字符,加上?表示使用非贪婪模式进行匹配
# (.*?)代表一个分组
userpat = '<div class="author clearfix">.*?<img src=".*?" alt="(.*?)">'
# userpat = '<div class="author clearfix">.*?<h2>(.*?)</h2>'
contentpat = '<div class="content">.*?<span>(.*?)</span>'
# re.S匹配任意符号,包括换行符
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
# 下面调试两个输出结果显示的结果是一样的
# print(content)
# exec("print("+name+")")
y = 1
for user in userlist:
name = "content" + str(y)
print("用户"+str(page)+str(y)+"是:"+user)
print("内容是:")
exec("print("+name+")")
print("\n")
y += 1
for i in range(1,4):
url = "https://www.qiushibaike.com/text/page/"+str(i)
getcontent(url,i)
输出结果显示:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHLxUERPhXR65UeRpHW4Z0MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL1ADNzIDO0IjMyEzMwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
以上是还存在不足,后期再更改。