在这里插入代码片@TOCpython 队列创建爬去多个网站数据# -- coding:utf-8 _-
“”"
@Author:xudehui
@File:reliangshuju.py
@Time:2020/11/14 18:30
@Motto:学习PYTHON进行中!
“”"
‘’’
https://food.hiyd.com/。这个网站可以查询食物的热量数据,还可以用来学习健身动作。
谷薯芋、杂豆、主食:
Request URL: https://food.hiyd.com/list-1-html
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36
paramaters:{
page: 2
https://food.hiyd.com/list-2-html?page=2
}
‘’’
导入所需的库和模块:
from gevent import monkey
#让程序变成异步模式
monkey.patch_all()
import gevent,requests,bs4,openpyxl,time
from gevent.queue import Queue
from openpyxl import load_workbook,Workbook,worksheet
创建队列对象,并赋值给work
work = Queue()
url = ‘https://food.hiyd.com/list-{type}-html?page={page}’
for x in range(1,24):
for y in range(1,24):
url_real = url.format(type = x,page=y)
work.put_nowait(url_real)
url1 = ‘https://food.hiyd.com/list-132-html?page={page}’
for x in range(1,24):
url_real1 =url1.format(page = x)
work.put_nowait(url_real1)
print(work)
def crawler(job):# 定义crawler函数
headers = {‘user-agent’: ‘Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36’}
# 添加请求头
while not job.empty():
# 当队列不是空的时候,就执行下面的程序
url = job.get_nowait()
# 用get_nowait()方法从队列里把刚刚放入的网址提取出来
res = requests.get(url, headers=headers)
# 用requests.get获取网页源代码
bs_res = bs4.BeautifulSoup(res.text, ‘html.parser’)
# 用BeautifulSoup解析网页源代码
category = bs_res.find(‘b’).text
# 用find提取出标签的内容,当前页面所属的分类
foods = bs_res.find_all(‘li’)
# 用find_all提取出
- 标签的内容
for food in foods:# 遍历foods
food_name = food.find(‘a’).find_all(‘div’)[1].find(‘h3’).text
# 用find_all在 - 标签下,提取出第二个
标签中
标签中的文本,也就是食物名称
food_calorie = food.find(‘a’).find_all(‘div’)[1].find(‘p’).text
# 用find_all在- 标签下,提取出第二个
标签中
标签中的文本,也就是食物热量
food_url = ‘http:’ + food.find(‘a’)[‘href’]
# 用find_all在 - 标签下,提取出唯一一个标签中href属性的值,跟’http:'组合在一起,就是食物详情页的链接
print([category, food_name, food_calorie, food_url])
# 打印食物的名称
- 标签下,提取出第二个
-
tasks_list = []
创建空的任务列表
for x in range(5):
# 相当于创建了5个爬虫
task = gevent.spawn(crawler(work))
# 用gevent.spawn()函数创建执行crawler()函数的任务
tasks_list.append(task)
# 往任务列表添加任务
gevent.joinall(tasks_list)用gevent.joinall方法,启动协程,执行任务列表里的所有任务,# 欢迎使用Markdown编辑器