前言:
本次我们需要爬取幽默笑话大全里的各种搞笑内容,当然还是使用上次我们提到的BeautifulSoup这个库,它的功能很强大,是本次爬取搞笑内容必不可少的工具。
接下来我们就爬取我们想要的内容吧,首先我们导入需要的库
import requests
from bs4 import BeautifulSoup
然后获取url地址页面内容,这里的headers是模拟浏览器来访问服务器,这里可以避免网页反爬取时报错
def download_page(url):
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0"}
r = requests.get(url,headers=headers)
return r.text
然后将获取的url地址页面内容传入BeautifulSoup,生成soup对象
output = """第{}页 作者:{} 性别:{} 年龄:{} 点赞:{} 评论:{}\n{}\n------------\n"""
soup = BeautifulSoup(html,'html.parser')
找到对应的标签获取作者姓名
con = soup.find(id='content-left')
con_list = con.find_all('div',class_="article")
for i in con_list:
author = i.find('h2').string #获取作者名字
获取笑话的内容
content = i.find('div',class_'content').find('span').get_text() #获取内容
然后获取评论和好笑数量
stats = i.find('div',class_='stats')
vote = stats.find('span',class_='stats-vote').find('i',class_='number').string
comment = stats.find('span',class_='stats-comments').find('i',class_='number').string
最后获取作者年龄,性别
author_info = i.find('div',class_='articleGender') #获取作者 年龄,性别
if author_info is not None: #非匿名用户
class_list = author_info['class']
if "womenIcon" in class_list:
gender = '女'
elif "manIcon" in class_list:
gender = '男'
else:
gender = ''
age = author_info.string # 获取年龄
else: # 匿名用户
gender = ''
age = ''
save_text(output.format(page,author,gender,age,vote,commentent,contentent))
然后将我们爬取的内容保存到记事本
def save_text(*args):
for i in args:
with open('qiubai.txt','a',encoding='utf-8') as f:
f.write(i)
最后在程序的入口调用我们对应的方法
def main():
#我们点击下面链接,在页面下方可以看到共有13页,可以构造如下 url
for i in range(1,14):
url = 'https://qiushibaike.com/text/page/{}'.format(i)
html = download_page(url)
get_content(html,i)
if __name__ == '__main__':
main()
总结:在本次学习中,同样遇到了一些问题,比如获取的内容为空报错,后来仔细检查才发现是代码写错了,以后需要更加细心,更加深入的学习。