python 非同步佇列爬取多個網站
在這裡插入程式碼片@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編輯器
相關文章
- Python爬蟲—爬取某網站圖片Python爬蟲網站
- 使用 Python 爬取網站資料Python網站
- JB的Python之旅-爬取phizhub網站Python網站
- 爬取某網站寫的python程式碼網站Python
- python爬蟲---網頁爬蟲,圖片爬蟲,文章爬蟲,Python爬蟲爬取新聞網站新聞Python爬蟲網頁網站
- Python使用多程式提高網路爬蟲的爬取速度Python爬蟲
- JB的Python之旅-爬取phizhub網站(原始碼)Python網站原始碼
- 如何用Python爬取需要登入的網站?Python網站
- 爬取網站新聞網站
- iOS 多執行緒--GCD 序列佇列、併發佇列以及同步執行、非同步執行iOS執行緒GC佇列非同步
- python爬蟲58同城(多個資訊一次爬取)Python爬蟲
- 分享一個用go寫的爬取非同步載入網站資料的例子Go非同步網站
- Python爬蟲入門教程 2-100 妹子圖網站爬取Python爬蟲網站
- python爬取網圖Python
- [譯] 如何使用 Python 和 BeautifulSoup 爬取網站內容Python網站
- 利用Python爬取攝影網站圖片,切勿商用Python網站
- Python爬蟲小專案:爬一個圖書網站Python爬蟲網站
- synchronized 中的同步佇列與等待佇列synchronized佇列
- 動態網站的爬取網站
- Python爬蟲入門【9】:圖蟲網多執行緒爬取Python爬蟲執行緒
- 爬蟲Selenium+PhantomJS爬取動態網站圖片資訊(Python)爬蟲JS網站Python
- python的queue佇列獲取資料Python佇列
- 利用Python爬蟲獲取招聘網站職位資訊Python爬蟲網站
- Python學習:爬個電影資源網站Python網站
- python多執行緒非同步爬蟲-Python非同步爬蟲試驗[Celery,gevent,requests]Python執行緒非同步爬蟲
- 利用python爬取城市公交站點Python
- 多執行緒爬取B站視訊執行緒
- AQS佇列同步器AQS佇列
- 爬蟲搭建代理池、爬取某網站影片案例、爬取新聞案例爬蟲網站
- 關於python爬取網頁Python網頁
- 【Python爬蟲】正則爬取趕集網Python爬蟲
- Python網路爬蟲3 – 生產者消費者模型爬取某金融網站資料Python爬蟲模型網站
- Python網路爬蟲3 - 生產者消費者模型爬取某金融網站資料Python爬蟲模型網站
- 快速爬取登入網站資料網站
- python例項,python網路爬蟲爬取大學排名!Python爬蟲
- Hyperf redis 非同步佇列使用Redis非同步佇列
- Java 佇列同步器 AQSJava佇列AQS
- AbstractQueuedSynchronizer 佇列同步器(AQS)佇列AQS