您的位置:首页 > 编程语言 > Python开发

Python基础学习之糗事百科爬虫

2019-03-12 22:49 453 查看

思路如下:

(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)

输出结果显示:

以上是还存在不足,后期再更改。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: