練習 - - 太っていない食べるためにどのような猫の兄は爬虫類046--コルーチンを書くためにあなたを教えます

脂肪を食べないように何?

低カロリー食品

食品の無数の量は、我々はカロリー食品をクロールする場合は、このデータ量が非常に大きくなければならないことがあります。

大量のデータをクロールするマルチコルーチンは非常に合理的かつ賢明な選択であります

クロールしたい場合は、それがデータを登るためにサイト情報保存された食品のエネルギーを選択する必要があります

ミントネット。それは、フィットネス関連での食事で、食品は、データのウェブサイトを照会することができます

www.boohee.com/food/

タスク:マルチコルーチンクロール食品カロリー情報ネットワークミント

単純にこのサイトを見て、あなたは11一般的な食品の分類の合計を見つけるだろう

[バレーやろ、豆、主食]このカテゴリをクリックして、あなたがこのカテゴリには食品の名称、および熱情報を含む10の食品のレコードは、存在し、右食品カテゴリに表示されます。食品の詳細ページにジャンプします食べ物の名前をクリックします。

私たちは、1つの分析によって、1が始まる4つのステップを開始するには爬虫類から、(データ→→→抽出データ・ストレージ・データを解析するデータを取得する)ことができます

私たちは、データベースを作成する必要があります

mysql> create database boohee character set utf8;
Query OK, 1 row affected (0.00 sec)
mysql> use boohee;
Database changed
mysql> create table food(id int primary key auto_increment, category varchar(20) not null, name varchar(200) not null, calorie varchar(200) not null);
Query OK, 0 rows affected (0.03 sec)
mysql> desc food;
+----------+--------------+------+-----+---------+----------------+
| Field    | Type         | Null | Key | Default | Extra          |
+----------+--------------+------+-----+---------+----------------+
| id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| category | varchar(20)  | NO   |     | NULL    |                |
| name     | varchar(200) | NO   |     | NULL    |                |
| calorie  | varchar(200) | NO   |     | NULL    |                |
+----------+--------------+------+-----+---------+----------------+
4 rows in set (0.02 sec)
复制代码

www.boohee.com/food/group/...

最初のページの最初の分類の1、ページ= 1

注文執行の種類の通常のバージョンを見てみましょう...

各カテゴリ、時間に関する統計情報を確認するために3つのクロールを...

import requests
from bs4 import BeautifulSoup
import pymysql
import time
connection = pymysql.connect(user='root', password='root', db='boohee')
cursor = connection.cursor()
category_list = []
def create_table():
    cursor.execute('drop database boohee')
    cursor.execute('create database boohee character set utf8')
    cursor.execute('use boohee')
    cursor.execute(
        'create table food(id int primary key auto_increment, category varchar(20) not null, name varchar(200) not null, calorie varchar(200) not null)')
    connection.commit()
def get_category():
    soup = BeautifulSoup(requests.get(
        'http://www.boohee.com/food/').text, 'html.parser')
    li_tag_list = soup.find_all(
        'li', class_='col-md-4 col-sm-4 col-xs-12 item')
    for li_tag in li_tag_list:
        category_list.append(li_tag.find(
            'div', class_='text-box').find('a').text)
def get_food():
    for index, cate in enumerate(category_list):
        if index != 11:
            for i in range(1, 3):
                url = "http://www.boohee.com/food/group/{}?page={}".format(
                    index+1, i)
                soup = BeautifulSoup(requests.get(url).text, 'html.parser')
                for div_tag in soup.find_all('div', class_="text-box pull-left"):
                    category = cate
                    name = div_tag.find('a')['title']
                    calorie = div_tag.find('p').text[3:]
                    add_food(category, name, calorie)
        else:
            for i in range(1, 3):
                url = 'http://www.boohee.com/food/view_menu?page={}'.format(i)
                soup = BeautifulSoup(requests.get(url).text, 'html.parser')
                for div_tag in soup.find_all('div', class_="text-box pull-left"):
                    category = cate
                    name = div_tag.find('a')['title']
                    calorie = div_tag.find('p').text[3:]
                    add_food(category, name, calorie)
def add_food(category, name, calorie):
    sql = "insert into food(category,name,calorie) values({},{},{})".format(
        repr(category), repr(name), repr(calorie))
    print(sql)
    cursor.execute(sql)
    connection.commit()
if __name__ == "__main__":
    start = time.time()
    create_table()
    get_category()
    get_food()
    print(time.time() - start)
复制代码

営業成績を見てください...

C:\Users\Administrator\Desktop\demo>python -u "c:\Users\Administrator\Desktop\demo\just_test.py"
insert into food(category,name,calorie) values('谷薯芋、杂豆、主食','Easy Fun 紫薯营养粥','317 大卡(每100克)')
insert into food(category,name,calorie) values('谷薯芋、杂豆、主食','白粥(粳米),又叫稀饭,大米粥,白米粥,米粥,大米汤','46 大卡(每100克)')
insert into food(category,name,calorie) values('谷薯芋、杂豆、主食','白粥(籼米),又叫稀饭,大米粥,白米粥','59 大卡(每100克)')
insert into food(category,name,calorie) values('谷薯芋、杂豆、主食','玉米(鲜),又叫苞谷、珍珠米、棒子、玉蜀黍、苞米、六谷','112 大卡(每100克)')
insert into food(category,name,calorie) values('谷薯芋、杂豆、主食','燕麦片,又叫燕麦','338 大卡(每100克)')
insert into food(category,name,calorie) values('谷薯芋、杂豆、主食','面条(生),又叫面','301 大卡(每100克)')
insert into food(category,name,calorie) values('谷薯芋、杂豆、主食','面条(煮),又叫面','110 大卡(每100克)')
insert into food(category,name,calorie) values('谷薯芋、杂豆、主食','籼米粉,又叫米线、米粉、粉','356 大卡(每100克)')
insert into food(category,name,calorie) values('谷薯芋、杂豆、主食','面包','313 大卡(每100克)')
insert into food(category,name,calorie) values('谷薯芋、杂豆、主食','红薯,又叫地瓜、番薯、甘薯','90 大卡(每100克)')
insert into food(category,name,calorie) values('谷薯芋、杂豆、主食','小米粥','46 大卡(每100克)')
insert into food(category,name,calorie) values('谷薯芋、杂豆、主食','马铃薯,又叫土豆、洋芋、地蛋、山药蛋、洋番薯','81 大卡(每100克)')
insert into food(category,name,calorie) values('谷薯芋、杂豆、主食','包子(猪肉馅)','227 大卡(每100克)')
insert into food(category,name,calorie) values('谷薯芋、杂豆、主食','米饭,又叫大米饭,饭,蒸米','116 大卡(每100克)')
insert into food(category,name,calorie) values('谷薯芋、杂豆、主食','白薯,又叫山芋、红皮山芋,地瓜、甘薯','106 大卡(每100克)')
insert into food(category,name,calorie) values('谷薯芋、杂豆、主食','大米,又叫稻米、米、生米','346 大卡(每100克)')
insert into food(category,name,calorie) values('谷薯芋、杂豆、主食','全麦面包,又叫全麦面包、全麦吐司、全麦面包片','246 大卡(每100克)')
insert into food(category,name,calorie) values('谷薯芋、杂豆、主食','烙饼','259 大卡(每100克)')
insert into food(category,name,calorie) values('谷薯芋、杂豆、主食','花卷','214 大卡(每100克)')
insert into food(category,name,calorie) values('谷薯芋、杂豆、主食','油条','388 大卡(每100克)')
insert into food(category,name,calorie) values('谷薯芋、杂豆、主食','嘉顿 生命面包 450g','284 大卡(每100克)')
......
insert into food(category,name,calorie) values('菜肴','扒鲜芦笋','86 大卡(每100克)')
insert into food(category,name,calorie) values('菜肴','果汁猪扒','173 大卡(每100克)')
insert into food(category,name,calorie) values('菜肴','虾仁扒油菜','61 大卡(每100克)')
insert into food(category,name,calorie) values('菜肴','蒜蓉玉叩鸡胗','129 大卡(每100克)')
insert into food(category,name,calorie) values('菜肴','蔬菜扒素肠','90 大卡(每100克)')
insert into food(category,name,calorie) values('菜肴','凤尾菇扒蛋','100 大卡(每100克)')
insert into food(category,name,calorie) values('菜肴','扒蝴蝶虾','168 大卡(每100克)')
insert into food(category,name,calorie) values('菜肴','铁扒巴德好司牛排','144 大卡(每100克)')
insert into food(category,name,calorie) values('菜肴','德州五香脱骨扒鸡','168 大卡(每100克)')
insert into food(category,name,calorie) values('菜肴','扒素肠','116 大卡(每100克)')
insert into food(category,name,calorie) values('菜肴','白菜扒猪肝','54 大卡(每100克)')
insert into food(category,name,calorie) values('菜肴','蚝油芥蓝素肉丝','128 大卡(每100克)')
7.019520282745361
复制代码

ほぼ7秒のために...

私たちは、データベースを見て...

コードは、書き方をコルーチンを確認することです残っても問題ありません...

from gevent import monkey
monkey.patch_all()
# 导入所需的库和模块:
import pymysql
import csv
import bs4
import requests
import gevent
from gevent.queue import Queue
sql_list = []
# 创建队列对象,并赋值给work。
work = Queue()
# 前3个常见食物分类的前3页的食物记录的网址:
url_1 = 'http://www.boohee.com/food/group/{type}?page={page}'
# 通过两个for循环,能设置分类的数字和页数的数字。
for x in range(1, 11):
    for y in range(1, 11):
        real_url = url_1.format(type=x, page=y)
        # 然后,把构造好的网址用put_nowait添加进队列里。
        work.put_nowait(real_url)
# 第11个常见食物分类的前3页的食物记录的网址:
url_2 = 'http://www.boohee.com/food/view_menu?page={page}'
# 通过for循环,能设置第11个常见食物分类的食物的页数。
for x in range(1, 11):
    real_url = url_2.format(page=x)
    # 然后,把构造好的网址用put_nowait添加进队
    work.put_nowait(real_url)
# 定义crawler函数
def crawler():
    # 添加请求头
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'
    }
    # 当队列不是空的时候,就执行下面的程序。
    while not work.empty():
        # 用get_nowait()方法从队列里把刚刚放入的网址提取出来。
        url = work.get_nowait()
        # 用requests.get获取网页源代码。
        res = requests.get(url, headers=headers)
        # 用BeautifulSoup解析网页源代码。
        bs_res = bs4.BeautifulSoup(res.text, 'html.parser')
        # 获取当前分类
        category = bs_res.find('div',class_="widget-food-list pull-right").find('h3').text
        # 用find_all提取出<li class="item clearfix">标签的内容。
        foods = bs_res.find_all('li', class_='item clearfix')
        # 遍历foods
        for food in foods:
            # 用find_all在<li class="item clearfix">标签下,提取出第2个<a>元素title属性的值,也就是食物名称。
            food_name = food.find_all('a')[1]['title']
            # 用find在<li class="item clearfix">标签下,提取<p>元素,再用text方法留下纯文本,就提取出了食物的热量。
            food_calorie = food.find('p').text[3:]
            # 打印食物的名称。
            sql = "insert into food(category,name,calorie) values({},{},{})".format(repr(category), repr(food_name), repr(food_calorie))
            sql_list.append(sql)
# 创建空的任务列表
tasks_list = []
# 相当于创建了5个爬虫
for x in range(5):
    # 用gevent.spawn()函数创建执行crawler()函数的任务。
    task = gevent.spawn(crawler)
    # 往任务列表添加任务。
    tasks_list.append(task)
# 用gevent.joinall方法,启动协程,执行任务列表里的所有任务,让爬虫开始爬取网站。
gevent.joinall(tasks_list)
connection = pymysql.connect(user='root', password='root', db='boohee')
cursor = connection.cursor()
cursor.execute('drop database boohee')
cursor.execute('create database boohee character set utf8')
cursor.execute('use boohee')
cursor.execute('create table food(id int primary key auto_increment, category varchar(20) not null, name varchar(200) not null, calorie varchar(200) not null)')
connection.commit()
for sql in sql_list:
    cursor.execute(sql)
    connection.commit()
connection.close()
复制代码

クイックジャンプ:

猫の兄弟は爬虫類000--を書くためにあなたを教えた.md始まる
猫の兄弟爬虫類001を書くためにあなたを教える-印刷()関数と変数た.md
猫の兄弟は爬虫類002--仕事を書くためにあなたを教える-ピカチュウた.md印刷
猫の兄弟は爬虫類を書くためにあなたを教えます003データ型変換た.md
猫の兄弟爬虫類004--データ型変換を書くためにあなたを教える-小さな実践がた.md
猫の兄弟を爬虫類005--データ型変換を書くためにあなたを教える-小さな仕事はた.md
猫の兄弟が爬虫類を書くためにあなたを教えます006- -条件付きとネストされた条件は、た.md
小さなオペレーティングた.md - 007爬虫類の条件とネストされた条件を書くためにあなたを教える猫の兄弟を
猫の兄弟をあなたは爬虫類008を書くことを教える-入力()関数は、た.md
猫の兄弟が爬虫類を書くためにあなたを教えます009 -入力()関数- AI小さな愛の学生がた.md
猫の兄弟を、010爬虫類、辞書のリストを書くために循環た.mdあなたを教える
猫の兄弟を爬虫類011--リスト、辞書、循環書くためにあなたを教える-小さな仕事をた.md
猫の兄は、あなたがブール値を書くことを教える、と4つの爬虫類012--のステートメントはた.md
あなたがブール値の書き込みに教える猫の兄弟を、そして4匹の爬虫類013--文-小さなジョブた.md
PKゲーム-猫の兄は、あなたが爬虫類014書くことを教えます。 MDの
PKゲーム(新しいリビジョン)た.md -猫の兄は、あなたが爬虫類015の書き込みに教える
あなたがた.md爬虫類016--機能書くことを教える猫の兄弟
猫の兄弟があなたが爬虫類017--関数を書くことを教えるを-小さなジョブがた.md
あなたを教えるために猫の兄弟を爬虫類018--debug.md書き込み
デバッグ-仕事-猫の兄弟を爬虫類019を書くためにあなたを教えます。mdの
猫の兄弟爬虫類020--クラスとオブジェクト(上)を書くためにあなたを教えた.md
猫の兄弟が爬虫類に021--クラスとオブジェクト(a)の書き込みにあなたを教える-ジョブた.mdを
猫の兄弟があなたが爬虫類に022--クラスとオブジェクトを書くことを教える(下)た.md
求人た.md -猫の兄は、あなたが爬虫類に023--クラスとオブジェクトを(下)書くことを教える
猫の兄弟があなたが爬虫類の書き込みに024--コード化された復号を教え&&た.md
猫の兄弟がコード化されたデコード爬虫類025 &&を書くためにあなたを教える-小さな仕事はた.md
猫の兄弟をあなたに教える爬虫類026--モジュールを書くためた.md
猫の兄弟爬虫類を書くためにあなたを教える027--モジュールがた.md紹介
猫の兄弟が爬虫類を書くためにあなたを教えます028- -導入モジュール-小さな仕事-看板た.md
猫の兄は、あなたが予備-requests.md爬虫類爬虫類029--書くことを教える
あなたは030--予備-requests-ジョブがた.md爬虫類爬虫類書くことを教える猫の兄弟を
猫の兄弟が031爬虫類を書くためにあなたを教えます-爬虫類の基礎-html.md
猫の兄は、あなたが爬虫類爬虫類032--最初の経験を書くことを教える-BeautifulSoup.md
猫の兄弟があなたが033--初めての経験-BeautifulSoup-ジョブがた.md爬虫類爬虫類の書き込みに教える
あなたは爬虫類を書くことを教える猫の兄弟を034- -た.md練習-BeautifulSoup爬虫類
の仕事- - top250.mdフィルム猫の兄は、あなたは035--爬虫類爬虫類-BeautifulSoup練習書くことを教える
猫の兄弟があなたが036--爬虫類爬虫類-BeautifulSoupの練習を書くために教えを-仕事-仕事をた.md映画top250-を解決するために
猫の兄弟は037--爬虫類爬虫類を書くためにあなたを教える-ベビーた.md曲を聴くために
猫の兄弟があなたに教える爬虫類を書くこと038--引数がた.md要求
猫の兄弟を保存されたデータを書き込むためにあなたを教える爬虫類039--た.md
猫の兄弟爬虫類を書くためにあなたを教えます040--ストアデータ -ジョブた.md
猫の兄弟があなたが爬虫類を書くことを教える041--アナログログイン-cookie.md
猫の兄弟は爬虫類042を書くためにあなたを教える-セッション使用はた.md
猫の兄弟を爬虫類を書くためにあなたを教える043--アナログブラウザがた.md
猫の兄弟を爬虫類044--アナログブラウザを書くためにあなたを教える-ジョブがた.md
猫の兄弟が爬虫類を書くためにあなたを教えます045--コルーチンた.md
練習- -猫の兄は爬虫類046--コルーチン書くためにあなたを教えて太っていないた.md食べるためにどのような
猫の兄弟を爬虫類047を書くためにあなたを教える-た.md scrapyフレームワーク
猫の兄弟が爬虫類を書くためにあなたを教えます048--た.md爬虫類爬虫類および抗
猫の兄弟は爬虫類を書くためにあなたを教える049--エンドSahuaた.md

ます。https://juejin.im/post/5cfc4adee51d4550bf1ae82eで再現

おすすめ

転載: blog.csdn.net/weixin_34319640/article/details/91465277