用多协程爬取HI运动11个常见食物分类里的食物信息(包含食物名、热量、食物详情页面链接)

本文介绍如何利用多协程技术,结合gevent、requests、BeautifulSoup等库,爬取HI运动网站中11个常见食物分类的食物名称、热量及详情页链接,重点在于队列的使用和协程的启动执行。
摘要由CSDN通过智能技术生成

用多协程爬取HI运动11个常见食物分类里的食物信息(包含食物名、热量、食物详情页面链接)。用多协程爬取HI运动11个常见食物分类里的食物信息(包含食物名、热量、食物详情页面链接)。

1根据需求先导入我们所需要的库和模块方便我们后面进行调用:实现协程功能的gevent库、queue、monkey模块,实现请求的requests库、实现解析网页的BeautifulSoup库以及实现数据存储openpyxl模块(或者csv模块)。

#导入所需的库和模块:
import gevent,requests,bs4,openpyxl
from gevent import monkey
from gevent.queue import Queue

#让程序变成异步模式
monkey.patch_all()

2.导入所需模块,并根据前面分析得出的网址规律,构造出前3个常见食物类别的前3页食物记录的网址和第11个常见食物类别的前3页食物记录的网址,同时把这些网址放进队列,并打印出来。
tip:
这里我们用了Queue()方法创建了空的队列。通过两个for循环,构造了前3个常见食物分类的前3页的食物记录的网址。这里我们用了Queue()方法创建了空的队列。通过两个for循环,构造了前3个常见食物分类的前3页的食物记录的网址。

#导入所需的库和模块:
import gevent,requests,bs4,openpyxl
from gevent import monkey
from gevent.queue import Queue

#让程序变成异步模式
monkey.patch_all()

# 创建队列对象,并赋值给work
work = Queue()

# 前3个分类的前3页的食物记录的网址:

url_1 = "https://food.hiyd.com/list-{type}-html?page={page}"

for x in range(1, 4):
    for y in range(1, 4):
        real_url = url_1.format(type=x, page=y)
        work.put_nowait(real_url)
# 通过两个for循环,能设置分类的数字和页数的数字
# 然后,把构造好的网址用put_nowait方法添加进队列里
# 第11个分类的前3页的食物记录的网址:

url_2 = "https://food.hiyd.com/list-132-html?page={page}"

for x in range(1, 4):
    real_url = url_2.format(page=x)
    work.put_nowait(real_url)
    
# 通过for循环,能设置第11个常见食物分类的食物的页数。
# 然后,把构造好的网址用put_nowait方法添加进队列里。
print(work)
# 打印队列

3.接着,就要使用gevent帮我们爬取数据,这一部分可以说是最核心的代码。在这里插入图片描述
4.首先,需要定义一个爬取函数。请认真阅读和理解下方的代码。

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 =<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值