Python 爬虫(10)

多协程实践


打开网址,查看所要获取的信息的存取地方
我们讲过判断数据存储在哪里的方法。请你打开http://www.boohee.com/food/group/1网站,右击打开“检查”工具,并点击Network,然后刷新页面。点击第0个请求1,看Response
我们能在Response里找到食物的信息,说明我们想要的数据存在HTML里。

再看第0个请求1的Headers,可以发现薄荷网的网页请求方式是get。
知道了请求方式是get,我们就知道可以用requests.get()获取数据。
找寻不同网页的规律
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

from gevent import monkey
monkey.patch_all()
#让程序变为异步模式
import gevent,requests,bs4,csv
from gevent.queue import Queue
from bs4 import BeautifulSoup
import time
import csv

# url_list=[]
# for i in range(1,4):
#     for j in range(1,4):
#         url_list.append('http://www.boohee.com/food/group/' + str(i) + '?page=' + str(j))
# for i in range(1,4):
#      url_list.append('http://www.boohee.com/food/view_menu/?page='+str(j))
# for url in url_list:
#     print(url)

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

#前三个常见食物分类的前三页的食物网址的记录
url_1='http://www.boohee.com/food/group/{type}?page={page}'
for i in range(1,4):
    for j in range(1,4):
        url_1_real=url_1.format(type=i,page=j)
        work.put_nowait(url_1_real)

url_2='http://www.boohee.com/food/view_menu/?page={page}'
for i in range(1,4):
    url_2_real=url_2.format(page=i)
    work.put_nowait(url_2_real)

#print(work)

def crawler():
    headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'}
    #模拟浏览器头,防止反爬虫
    while not work.empty():
        url=work.get_nowait()
        # print(url)
        res=requests.get(url,headers=headers)
        # print(res.text)
        #获取网页源代码
        soup=BeautifulSoup(res.text,'html.parser')
        #用BeautifulSoup解析网页源代码
        foods=soup.find_all('li',class_='item clearfix')
        for food in foods:
            food_name=food.find_all('a')[1]['title']
            # print(food_name)
            food_heat=food.find('p').text
            food_url = 'http://www.boohee.com' + food.find_all('a')[1]['href']
            # print(food_heat)
            writer.writerow([food_name, food_heat, food_url])
            # 借助writerow()函数,把提取到的数据:食物名称、食物热量、食物详情链接,写入csv文件。

csv_file=open('boohee.csv','w',newline='')
csv_file= open('boohee.csv', 'w', newline='')
#调用open()函数打开csv文件,传入参数:文件名“boohee.csv”、写入模式“w”、newline=''。
writer = csv.writer(csv_file)
# 用csv.writer()函数创建一个writer对象。
writer.writerow(['食物', '热量', '链接'])
#借助writerow()函数往csv文件里写入文字:食物、热量、链接

task_list=[]
#创建5个爬虫
for x in range(5):
    task=gevent.spawn(crawler)
    #创建任务
    task_list.append(task)
    #添加任务队列

start_time=time.time()
gevent.joinall(task_list)
end_time=time.time()
print('time='+str(end_time-start_time))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值