爬蟲精進(jìn)(十一) ------ 協(xié)程案例

需求 :用多協(xié)程爬取薄荷網(wǎng)11個(gè)常見食物分類里的食物信息(包含食物名筹误、熱量埋泵、食物詳情頁面鏈接)。

分析過程:

一.判斷要爬取的內(nèi)容在哪里

我們能在Response里找到食物的信息,說明我們想要的數(shù)據(jù)存在HTML里撬碟。再看第0個(gè)請(qǐng)求1的Headers,可以發(fā)現(xiàn)薄荷網(wǎng)的網(wǎng)頁請(qǐng)求方式是get莉撇。知道了請(qǐng)求方式是get呢蛤,我們就知道可以用requests.get()獲取數(shù)據(jù)。

二.分析網(wǎng)址結(jié)構(gòu)

1.分析類別不同網(wǎng)址的規(guī)律

先關(guān)閉“檢查”工具棍郎。我們接著來觀察其障,每個(gè)常見食物分類的網(wǎng)址和每一頁食物的網(wǎng)址有何規(guī)律。

果然涂佃,常見食物分類的網(wǎng)址構(gòu)造是有規(guī)律的励翼。前10個(gè)常見食物分類的網(wǎng)址都是:http://www.boohee.com/food/group/+數(shù)字
唯獨(dú)最后一個(gè)常見食物分類【菜肴】的網(wǎng)址與其他不同,是:http://www.boohee.com/food/view_menu

2.分析分頁不同時(shí)網(wǎng)址的規(guī)律

原來?page=數(shù)字真的是代表頁數(shù)的意思辜荠。只要改變page后面的數(shù)字汽抚,就能實(shí)現(xiàn)翻頁。
基于我們上面的觀察伯病,可以得出薄荷網(wǎng)每個(gè)食物類別的每一頁食物記錄的網(wǎng)址規(guī)律——


三.弄清楚HTML的結(jié)構(gòu)

前面我們知道薄荷網(wǎng)的食物熱量的數(shù)據(jù)都存在HTML里造烁,所以等下就可以用BeautifulSoup模塊來解析。

你把鼠標(biāo)接著移到食物上午笛,你就會(huì)發(fā)現(xiàn):原來每個(gè)食物的信息都被分別藏在了一個(gè)<li class="item clearfix">…</li>標(biāo)簽里惭蟋。每頁食物記錄里有10個(gè)食物,剛好對(duì)應(yīng)上網(wǎng)頁源代碼里的10個(gè)<li class="item clearfix">…</li>標(biāo)簽药磺。

這么看來的話告组,我們用find_all/find就能提取出<li class="item clearfix">…</li>標(biāo)簽下的食物詳情鏈接、名稱和熱量癌佩。

最終代碼為:

from gevent import monkey
monkey.patch_all()
import gevent,requests, bs4, csv
from gevent.queue import Queue

work = Queue()
url_1 = 'http://www.boohee.com/food/group/{type}?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)

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

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():
        url = work.get_nowait()
        res = requests.get(url, headers=headers)
        bs_res = bs4.BeautifulSoup(res.text, 'html.parser')
        foods = bs_res.find_all('li', class_='item clearfix')
        for food in foods:
            food_name = food.find_all('a')[1]['title']
            food_url = 'http://www.boohee.com' + food.find_all('a')[1]['href']
            food_calorie = food.find('p').text
            writer.writerow([food_name, food_calorie, food_url])
            #借助writerow()函數(shù)木缝,把提取到的數(shù)據(jù):食物名稱、食物熱量围辙、食物詳情鏈接氨肌,寫入csv文件。
            print(food_name)

csv_file= open('boohee.csv', 'w', newline='')
#調(diào)用open()函數(shù)打開csv文件酌畜,傳入?yún)?shù):文件名“boohee.csv”怎囚、寫入模式“w”、newline=''。
writer = csv.writer(csv_file)
# 用csv.writer()函數(shù)創(chuàng)建一個(gè)writer對(duì)象恳守。
writer.writerow(['食物', '熱量', '鏈接'])
#借助writerow()函數(shù)往csv文件里寫入文字:食物考婴、熱量、鏈接

tasks_list = []
for x in range(5):
    task = gevent.spawn(crawler)
    tasks_list.append(task)
gevent.joinall(tasks_list)

練習(xí) :請(qǐng)使用多協(xié)程和隊(duì)列催烘,爬取時(shí)光網(wǎng)電視劇TOP100的數(shù)據(jù)(劇名沥阱、導(dǎo)演、主演和簡(jiǎn)介)

import  gevent,requests,bs4,csv
from gevent.queue import Queue
from gevent import monkey
#monkey.patch_all()

work = Queue()
url = 'http://www.mtime.com/top/tv/top100/index-{page}.html'
work.put_nowait('http://www.mtime.com/top/tv/top100/')

for i in range(2,11):
    work.put_nowait(url.format(page=i))

csv_file = open('movies.csv','w',newline="")
writer = csv.writer(csv_file)
writer.writerow(['序號(hào)','劇名','導(dǎo)演','主演','簡(jiǎn)介'])

def crawler():
    while not work.empty():
        realurl = work.get_nowait()
        res = requests.get(realurl)
        bf = bs4.BeautifulSoup(res.text,'html.parser')
        movesUL = bf.find('ul',id='asyncRatingRegion').find_all('li')
        for one in movesUL:
            index = one.find('em').text
            mov_con = one.find('div',class_='mov_con')
            mov_A = mov_con.find_all('a')
            if len(mov_A) > 1 :
               mov_name = mov_A[0].text
            if len(mov_A) > 2 :
                mov_director = mov_A[1].text
            if len(mov_A) > 3 :
                mov_mainactor = mov_A[2].text
            mov_detail = one.find('p',class_ = 'mt3')
            writer.writerow([index,mov_name,mov_director,mov_mainactor,mov_detail])

taskList =[]
for x in range(2):
    task = gevent.spawn(crawler)
    taskList.append(task)

gevent.joinall(taskList)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末伊群,一起剝皮案震驚了整個(gè)濱河市考杉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌舰始,老刑警劉巖崇棠,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異丸卷,居然都是意外死亡枕稀,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門谜嫉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來萎坷,“玉大人,你說我怎么就攤上這事沐兰《叩担” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵住闯,是天一觀的道長(zhǎng)虐呻。 經(jīng)常有香客問我,道長(zhǎng)寞秃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任偶惠,我火速辦了婚禮春寿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘忽孽。我一直安慰自己绑改,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布兄一。 她就那樣靜靜地躺著厘线,像睡著了一般。 火紅的嫁衣襯著肌膚如雪出革。 梳的紋絲不亂的頭發(fā)上造壮,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼耳璧。 笑死成箫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的旨枯。 我是一名探鬼主播蹬昌,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼攀隔!你這毒婦竟也來了皂贩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤昆汹,失蹤者是張志新(化名)和其女友劉穎明刷,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體筹煮,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡遮精,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了败潦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片本冲。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖劫扒,靈堂內(nèi)的尸體忽然破棺而出檬洞,到底是詐尸還是另有隱情,我是刑警寧澤沟饥,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布添怔,位于F島的核電站,受9級(jí)特大地震影響贤旷,放射性物質(zhì)發(fā)生泄漏广料。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一幼驶、第九天 我趴在偏房一處隱蔽的房頂上張望艾杏。 院中可真熱鬧,春花似錦盅藻、人聲如沸购桑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽勃蜘。三九已至,卻和暖如春假残,著一層夾襖步出監(jiān)牢的瞬間缭贡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留匀归,地道東北人坑资。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像穆端,于是被迫代替她去往敵國(guó)和親袱贮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 一說到REST体啰,我想大家的第一反應(yīng)就是“啊攒巍,就是那種前后臺(tái)通信方式』挠拢”但是在要求詳細(xì)講述它所提出的各個(gè)約束柒莉,以及如...
    時(shí)待吾閱讀 3,423評(píng)論 0 19
  • 二維碼功能代碼封裝 demo正在整理,準(zhǔn)備上傳
    翻這個(gè)墻閱讀 172評(píng)論 0 0
  • 《社戲》是一篇在異鄉(xiāng)回憶小時(shí)候在故鄉(xiāng)看戲的小說沽翔。在寫這篇小說的前一年兢孝,1921年,作者還寫了一篇小說仅偎,那篇小說直接...
    平方田閱讀 382評(píng)論 0 0
  • 可顏老師們的妝容精致而不刻意跨蟹,下面的這些是她們挑選出來的好產(chǎn)品,想要畫出自然裸妝可以借鑒橘沥。 卸妝產(chǎn)品:Fancl ...
    喬小米閱讀 423評(píng)論 0 2