夏日的热笑话获取|Python 主题月

759 阅读3分钟

本文正在参加「Python主题月」,详情查看 活动链接

工作准备

  在进行过夏日TOP10最冷城市的爬取之后,通过前几章的数据爬取,大概知道了接口与页面爬取的流程是如何进行的,该篇再给小伙伴们获取下笑话集合~

本地运行环境也是基于docker,搭建的粗细节,小伙伴们可以查看之前的篇文章介绍 ==>传送门

代码编写

需求分析

   这里选择的是糗事百科,通过网页元素的查看,我们很快的能找到我们想要的元素位置。

  1. 首选确认我们想要的元素位置,找到分页规律。
  2. 通过循环请求爬取页面上的元素,进行输出。

编写代码

  1. 首选定义函数入口,爬取对应数据项。
def spider():
	jokes = []
	for page_num in range(1, 10):
		jokes.append(spider_page(base_url % page_num))
	for joke in jokes:
		print(joke)
	print('恭喜!爬取数据完成!')
if __name__ == '__main__':
	spider()
  1. 爬取对应页面上元素并进行收集。
def analysis_data():
    # 1.默认的排序方式是升序【通过最低气温进行排序】
    ALL_DATA.sort(key=lambda data: data['temp_low'])
    # 2.获取前面10条数据
    top_10 = ALL_DATA[:10]
    return top_10
  1. 对数据进行输出为直方图。
def spider_page(url):
	response = requests.get(url, headers=HEADERS)
	text_raw = response.text

	# 获取此页的段子数据
	# 1.获取作者列表数据
	authors_pre = re.findall(r'<div\sclass="article.*?<h2>(.*?)</h2>', text_raw, re.DOTALL)

	# 1.1 对获取的作者信息进一步进行处理【数据中包含\n】
	authors = []
	for author_pre in authors_pre:
		author = re.sub(r'\n', '', author_pre)
		authors.append(author)

	# 2.获取段子列表数据
	contents_pre = re.findall(r'<div\sclass="content">.*?<span>(.*?)</span>', text_raw, re.S)

	# 2.1 对段子数据进一步处理【数据中包含\n和<br/>】
	contents = []
	for content_pre in contents_pre:
		content = re.sub(r'<.*?>|\n', '', content_pre)
		contents.append(content)

	# 3.把两个列表数据组装成一个新的列表中
	jokes = []
	for temp in zip(authors, contents):
		author, content = temp
		jokes.append({
			'author': author,
			'content': content
		})

	# 4.返回当前页面获取的段子数据列表
	return jokes

效果截图

image.png

完整代码


import re
import requests

# 待爬取的地址
base_url = 'https://www.qiushibaike.com/text/page/%s/'

HEADERS = {
	'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36',
	'Referer': 'https://www.qiushibaike.com/'
}


def spider_page(url):
	response = requests.get(url, headers=HEADERS)
	text_raw = response.text

	# 获取此页的段子数据
	# 1.获取作者列表数据
	authors_pre = re.findall(r'<div\sclass="article.*?<h2>(.*?)</h2>', text_raw, re.DOTALL)

	# 1.1 对获取的作者信息进一步进行处理【数据中包含\n】
	authors = []
	for author_pre in authors_pre:
		author = re.sub(r'\n', '', author_pre)
		authors.append(author)

	# 2.获取段子列表数据
	contents_pre = re.findall(r'<div\sclass="content">.*?<span>(.*?)</span>', text_raw, re.S)

	# 2.1 对段子数据进一步处理【数据中包含\n和<br/>】
	contents = []
	for content_pre in contents_pre:
		content = re.sub(r'<.*?>|\n', '', content_pre)
		contents.append(content)

	# 3.把两个列表数据组装成一个新的列表中
	jokes = []
	for temp in zip(authors, contents):
		author, content = temp
		jokes.append({
			'author': author,
			'content': content
		})

	# 4.返回当前页面获取的段子数据列表
	return jokes


def spider():
	jokes = []

	for page_num in range(1, 10):

		jokes.append(spider_page(base_url % page_num))

	for joke in jokes:
		print(joke)

	print('恭喜!爬取数据完成!')


if __name__ == '__main__':
	spider()

总结

  通过上面简单的小栗子,其实大家应该能掌握到简单爬虫的流程了,具体的操作流程还是需要结合实际场景。

(历史文章如下~)

  1. 影片资源如何更快获取|Python 主题月
  2. 更快获取腾讯招聘职位信息|Python 主题月
  3. 夏天气温最冷TOP10城市|Python 主题月