ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python 爬虫(10)

2021-05-13 21:02:11  阅读:182  来源: 互联网

标签:10 boohee Python 爬虫 url food time csv page


多协程实践


打开网址,查看所要获取的信息的存取地方
我们讲过判断数据存储在哪里的方法。请你打开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))

标签:10,boohee,Python,爬虫,url,food,time,csv,page
来源: https://blog.csdn.net/lipeixuan_1/article/details/116763034

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有