精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

pyspider爬蟲教程(1):HTML和CSS選擇

開發(fā) 前端
雖然以前寫過 如何抓取WEB頁(yè)面 和 如何從 WEB 頁(yè)面中提取信息。但是感覺還是需要一篇 step by step 的教程,不然沒有一個(gè)總體的認(rèn)識(shí)。不過,沒想到這個(gè)教程居然會(huì)變成一篇譯文,在這個(gè)爬蟲教程系列文章中,會(huì)以實(shí)際的例子,由淺入深討論爬取(抓取和解析)的一些關(guān)鍵問題。

雖然以前寫過 如何抓取WEB頁(yè)面 和 如何從 WEB 頁(yè)面中提取信息。但是感覺還是需要一篇 step by step 的教程,不然沒有一個(gè)總體的認(rèn)識(shí)。不過,沒想到這個(gè)教程居然會(huì)變成一篇譯文,在這個(gè)爬蟲教程系列文章中,會(huì)以實(shí)際的例子,由淺入深討論爬取(抓取和解析)的一些關(guān)鍵問題。

在 教程一 中,我們將要爬取的網(wǎng)站是豆瓣電影:http://movie.douban.com/

你可以在: http://demo.pyspider.org/debug/tutorial_douban_movie 獲得完整的代碼,和進(jìn)行測(cè)試。

開始之前

由于教程是基于 pyspider 的,你可以安裝一個(gè) pyspider(Quickstart,也可以直接使用 pyspider 的 demo 環(huán)境: http://demo.pyspider.org/。

你還應(yīng)該至少對(duì)萬維網(wǎng)是什么有一個(gè)簡(jiǎn)單的認(rèn)識(shí):

  • 萬維網(wǎng)是一個(gè)由許多互相鏈接的超文本頁(yè)面(以下簡(jiǎn)稱網(wǎng)頁(yè))組成的系統(tǒng)。
  • 網(wǎng)頁(yè)使用網(wǎng)址(URL)定位,并鏈接彼此
  • 網(wǎng)頁(yè)使用 HTTP 協(xié)議傳輸
  • 網(wǎng)頁(yè)使用 HTML 描述外觀和語義

所以,爬網(wǎng)頁(yè)實(shí)際上就是:

  • 找到包含我們需要的信息的網(wǎng)址(URL)列表
  • 通過 HTTP 協(xié)議把頁(yè)面下載回來
  • 從頁(yè)面的 HTML 中解析出需要的信息
  • 找到更多這個(gè)的 URL,回到 2 繼續(xù)

選取一個(gè)開始網(wǎng)址

既然我們要爬所有的電影,首先我們需要抓一個(gè)電影列表,一個(gè)好的列表應(yīng)該:

  • 包含足夠多的電影的 URL
  • 通過翻頁(yè),可以遍歷到所有的電影
  • 一個(gè)按照更新時(shí)間排序的列表,可以更快抓到最新更新的電影

我們?cè)?http://movie.douban.com/ 掃了一遍,發(fā)現(xiàn)并沒有一個(gè)列表能包含所有電影,只能退而求其次,通過抓取分類下的所有的標(biāo)簽列表頁(yè),來遍歷所有的電影: http://movie.douban.com/tag/

創(chuàng)建一個(gè)項(xiàng)目

在 pyspider 的 dashboard 的右下角,點(diǎn)擊 “Create” 按鈕

 

替換 on_start 函數(shù)的 self.crawl 的 URL:

  1. @every(minutes=24 * 60) 
  2.  
  3. def on_start(self): 
  4.  
  5.     self.crawl('http://movie.douban.com/tag/', callback=self.index_page)  
  • self.crawl 告訴 pyspider 抓取指定頁(yè)面,然后使用 callback 函數(shù)對(duì)結(jié)果進(jìn)行解析。
  • @every 修飾器,表示 on_start 每天會(huì)執(zhí)行一次,這樣就能抓到最新的電影了。

點(diǎn)擊綠色的 run 執(zhí)行,你會(huì)看到 follows 上面有一個(gè)紅色的 1,切換到 follows 面板,點(diǎn)擊綠色的播放按鈕:

 

Tag 列表頁(yè)

在 tag 列表頁(yè) 中,我們需要提取出所有的 電影列表頁(yè) 的 URL。你可能已經(jīng)發(fā)現(xiàn)了,sample handler 已經(jīng)提取了非常多大的 URL,所有,一種可行的提取列表頁(yè) URL 的方法就是用正則從中過濾出來:

  1. import re 
  2.  
  3. ... 
  4.  
  5.   
  6.  
  7.     @config(age=10 * 24 * 60 * 60) 
  8.  
  9.     def index_page(self, response): 
  10.  
  11.         for each in response.doc('a[href^="http"]').items(): 
  12.  
  13.             if re.match("http://movie.douban.com/tag/\w+", each.attr.href, re.U): 
  14.  
  15.                 self.crawl(each.attr.href, callback=self.list_page)  

由于 電影列表頁(yè)和 tag列表頁(yè)長(zhǎng)的并不一樣,在這里新建了一個(gè) callback 為 self.list_page

  • @config(age=10 * 24 * 60 * 60) 在這表示我們認(rèn)為 10 天內(nèi)頁(yè)面有效,不會(huì)再次進(jìn)行更新抓取
  • 由于 pyspider 是純 Python 環(huán)境,你可以使用 Python 強(qiáng)大的內(nèi)置庫(kù),或者你熟悉的第三方庫(kù)對(duì)頁(yè)面進(jìn)行解析。不過更推薦使用 CSS選擇器。

電影列表頁(yè)

再次點(diǎn)擊 run 讓我們進(jìn)入一個(gè)電影列表頁(yè)(list_page)。在這個(gè)頁(yè)面中我們需要提取:

  • 電影的鏈接,例如,http://movie.douban.com/subject/1292052/
  • 下一頁(yè)的鏈接,用來翻頁(yè)

CSS選擇器

CSS選擇器,顧名思義,是 CSS 用來定位需要設(shè)置樣式的元素 所使用的表達(dá)式。既然前端程序員都使用 CSS選擇器 為頁(yè)面上的不同元素設(shè)置樣式,我們也可以通過它定位需要的元素。你可以在 CSS 選擇器參考手冊(cè) 這里學(xué)習(xí)更多的 CSS選擇器 語法。

在 pyspider 中,內(nèi)置了 response.doc 的 PyQuery 對(duì)象,讓你可以使用類似 jQuery 的語法操作 DOM 元素。你可以在 PyQuery 的頁(yè)面上找到完整的文檔。

CSS Selector Helper

在 pyspider 中,還內(nèi)置了一個(gè) CSS Selector Helper,當(dāng)你點(diǎn)擊頁(yè)面上的元素的時(shí)候,可以幫你生成它的 CSS選擇器 表達(dá)式。你可以點(diǎn)擊 Enable CSS selector helper 按鈕,然后切換到 web 頁(yè)面:

 

開啟后,鼠標(biāo)放在元素上,會(huì)被黃色高亮,點(diǎn)擊后,所有擁有相同 CSS選擇器 表達(dá)式的元素會(huì)被高亮。表達(dá)式會(huì)被插入到 python 代碼當(dāng)前光標(biāo)位置。創(chuàng)建下面的代碼,將光標(biāo)停留在單引號(hào)中間:

  1. def list_page(self, response): 
  2.  
  3.     for each in response.doc('').items():  

點(diǎn)擊一個(gè)電影的鏈接,CSS選擇器 表達(dá)式將會(huì)插入到你的代碼中,如此重復(fù),插入翻頁(yè)的鏈接:

  1. def list_page(self, response): 
  2.  
  3.     for each in response.doc('HTML>BODY>DIV#wrapper>DIV#content>DIV.grid-16-8.clearfix>DIV.article>DIV>TABLE TR.item>TD>DIV.pl2>A').items(): 
  4.  
  5.         self.crawl(each.attr.href, callback=self.detail_page) 
  6.  
  7.     # 翻頁(yè) 
  8.  
  9.     for each in response.doc('HTML>BODY>DIV#wrapper>DIV#content>DIV.grid-16-8.clearfix>DIV.article>DIV.paginator>A').items(): 
  10.  
  11.         self.crawl(each.attr.href, callback=self.list_page)  
  • 翻頁(yè)是一個(gè)到自己的 callback 回調(diào)

電影詳情頁(yè)

再次點(diǎn)擊 run,follow 到詳情頁(yè)。使用 css selector helper 分別添加電影標(biāo)題,打分和導(dǎo)演:

  1. def detail_page(self, response): 
  2.  
  3.     return { 
  4.  
  5.         "url": response.url, 
  6.  
  7.         "title": response.doc('HTML>BODY>DIV#wrapper>DIV#content>H1>SPAN').text(), 
  8.  
  9.         "rating": response.doc('HTML>BODY>DIV#wrapper>DIV#content>DIV.grid-16-8.clearfix>DIV.article>DIV.indent.clearfix>DIV.subjectwrap.clearfix>DIV#interest_sectl>DIV.rating_wrap.clearbox>P.rating_self.clearfix>STRONG.ll.rating_num').text(), 
  10.  
  11.         "導(dǎo)演": [x.text() for x in response.doc('a[rel="v:directedBy"]').items()], 
  12.  
  13.     } 

注意,你會(huì)發(fā)現(xiàn) css selector helper 并不是總是能提取到合適的 CSS選擇器 表達(dá)式。你可以在 Chrome Dev Tools 的幫助下,寫一個(gè)合適的表達(dá)式:

 

右鍵點(diǎn)擊需要提取的元素,點(diǎn)擊審查元素。你并不需要像自動(dòng)生成的表達(dá)式那樣寫出所有的祖先節(jié)點(diǎn),只要寫出那些能區(qū)分你不需要的元素的關(guān)鍵節(jié)點(diǎn)的屬性就可以了。不過這需要抓取和網(wǎng)頁(yè)前端的經(jīng)驗(yàn)。所以,學(xué)習(xí)抓取的最好方法就是學(xué)會(huì)這個(gè)頁(yè)面/網(wǎng)站是怎么寫的。

你也可以在 Chrome Dev Tools 的 Javascript Console 中,使用 $$(a[rel="v:directedBy"]) 測(cè)試 CSS Selector。

開始抓取

  • 使用 run 單步調(diào)試你的代碼,對(duì)于用一個(gè) callback 最好使用多個(gè)頁(yè)面類型進(jìn)行測(cè)試。然后保存。
  • 回到 Dashboard,找到你的項(xiàng)目
  • 將 status 修改為 DEBUG 或 RUNNING
  • 按 run 按鈕 

責(zé)任編輯:龐桂玉 來源: Python開發(fā)者
相關(guān)推薦

2017-05-12 18:00:44

pyspiderAJAXHTTP

2011-07-15 09:10:44

HTML 5CSS3

2013-09-16 10:19:08

htmlcssJavaScript

2010-08-27 15:16:26

htmlbodyCSS

2021-06-28 18:57:15

CSS網(wǎng)頁(yè)爬蟲

2011-06-17 08:54:38

HTML 5CSS3

2011-01-25 09:16:33

HTML 5CSS3Web

2016-11-07 15:23:37

Python

2010-09-06 09:41:28

CSS繼承

2010-09-03 09:30:29

CSS選擇器

2012-05-11 09:37:34

HTML5

2020-04-21 14:00:25

HTMLCSSJS

2011-03-29 13:45:55

HTMLCSSjavascript

2011-05-25 09:34:30

HTML5cssjavascript

2011-03-22 08:54:02

HTML 5CSS3JavaScript

2017-08-17 16:00:36

PythonPyspiderHtml5

2012-05-24 11:03:55

HTML5

2023-10-07 10:24:56

開發(fā)前端

2016-09-29 15:19:04

HTMLCSSWeb

2012-03-29 09:35:32

WEBCSS
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

日韩精品一区二区在线| 亚洲欧美另类在线| 国产精品亚洲片夜色在线| 亚洲AV成人无码网站天堂久久| 在线观看亚洲精品福利片| 亚洲一区视频在线| 无遮挡亚洲一区| 亚洲av无码国产精品久久不卡| 亚洲视频播放| 久久激情视频免费观看| 国产 中文 字幕 日韩 在线| 成人h在线观看| 亚洲国产综合人成综合网站| 日韩高清在线播放| 精品国产乱码一区二区三| 亚洲女人av| 久久成人在线视频| 西西444www无码大胆| 欧美午夜网站| 欧美色精品天天在线观看视频| 精品久久久无码人妻字幂| 黄色视屏网站在线免费观看| 国产激情精品久久久第一区二区| 日本久久久久亚洲中字幕| 国产探花在线播放| 色999日韩| 国产午夜精品久久久| 91精产国品一二三| 91精品在线免费视频| 日韩欧美一区二区在线| 黄色网在线视频| 免费黄色网址在线观看| 国产亚洲成av人在线观看导航| 成人av免费在线看| 97人妻精品一区二区三区视频| av成人天堂| 欧美激情视频网址| 亚洲天堂一级片| 日本午夜一区| 在线观看日韩欧美| 色婷婷av777| 久久久久高潮毛片免费全部播放| 日韩视频免费观看高清完整版在线观看| www.超碰com| 日韩免费福利视频| 日韩欧美高清视频| 欧美s码亚洲码精品m码| 青草视频在线免费直播| 中文字幕一区二区三区不卡在线 | 国产视频一区二区视频| 极品在线视频| 午夜影院久久久| 国产特级淫片高清视频| 91丝袜在线| 性做久久久久久免费观看欧美| 免费看日本黄色| av大大超碰在线| 亚洲黄色av一区| 国产成人免费高清视频| 新版中文在线官网| 一区二区三区欧美| 日韩精品在线中文字幕| 91av久久| 一本色道久久综合亚洲aⅴ蜜桃 | 波多野结衣中文字幕久久| 一区二区三区在线影院| 无码人妻精品一区二区蜜桃网站| 毛片网站在线看| 亚洲国产欧美日韩另类综合| 日本黄大片在线观看| av资源中文在线| 欧美视频不卡中文| 三级a在线观看| 激情小说亚洲| 日韩一级欧美一级| 国产乱了高清露脸对白| 一区二区三区视频免费观看| 亚洲香蕉成人av网站在线观看| 国产精品扒开腿做爽爽| 色婷婷色综合| 欧美日本高清视频| 久久久久久久久久久久久av| 日韩综合小视频| 91久久国产精品| 人妻夜夜爽天天爽| 国产午夜精品一区二区三区四区| 一区二区三区在线观看www| 成a人片在线观看| 富二代精品短视频| 一区二区免费av| 久9re热视频这里只有精品| 亚洲精品视频免费在线观看| 综合 欧美 亚洲日本| 欧美1区2区视频| 欧美一级大片在线观看| 亚洲在线视频播放| av在线不卡电影| 杨幂一区欧美专区| 182在线视频观看| 欧美日韩中文国产| 精品熟女一区二区三区| 久久精品国产大片免费观看| 欧美激情在线视频二区| 日韩xxx视频| 成人免费精品视频| 亚洲色图自拍| 性欧美18xxxhd| 日韩午夜精品电影| 欧美偷拍一区二区三区| 亚洲国产高清一区| 成人黄色生活片| 欧美成熟毛茸茸| 亚洲永久精品大片| 乌克兰美女av| 伊人成综合网yiren22| 欧美大片免费看| 在线观看免费高清视频| 91亚洲资源网| 大胆欧美熟妇xx| 日韩福利影视| 亚洲图中文字幕| 日韩精品一区二区三| 精品一区二区三区蜜桃| 青娱乐一区二区| 久草在线视频网站| 欧美高清hd18日本| 极品人妻videosss人妻| 国产一区白浆| 精品国产乱码久久久久久郑州公司| 香港伦理在线| 欧洲一区二区三区在线| 中文字幕一区二区三区人妻不卡| 欧美激情性爽国产精品17p| 国产欧美日韩最新| jizz在线观看中文| 日本韩国欧美三级| 免费黄色在线视频| 亚洲欧美高清| 久久五月天婷婷| 91黄页在线观看| 精品国产99国产精品| 日韩在线中文字幕视频 | 91在线第一页| 欧美一站二站| 国产精品视频精品视频| 国产高清美女一级毛片久久| 日韩欧美国产中文字幕| 亚洲欧美色图视频| 国产精品一页| 欧美精品亚洲精品| 日韩欧美另类一区二区| 亚洲天堂网站在线观看视频| 国产视频1区2区| 国产三级一区二区| 九一精品在线观看| 欧美国产一区二区三区激情无套| 国产区亚洲区欧美区| 免费av网站在线看| 欧美精品三级在线观看| 永久久久久久久| 国产成人免费在线| 国产精品又粗又长| 九九免费精品视频在线观看| 国产成人精品日本亚洲| 91女主播在线观看| 欧美精品在线视频| 美国黄色小视频| 成人黄色国产精品网站大全在线免费观看| av在线免费观看国产| 欧美黄色网视频| 国产激情久久久| 日韩精品毛片| 精品国产1区二区| 日本视频网站在线观看| 国产精品欧美极品| 免费人成视频在线播放| 欧美日本免费| 久久综合狠狠综合久久综青草| 97久久香蕉国产线看观看| 国产午夜一区二区| 国产三级午夜理伦三级| 亚洲国产精品久久人人爱| japanese中文字幕| 国产精品一区二区久久精品爱涩 | 三级欧美在线一区| 综合久久国产| 麻豆成人入口| 国产在线精品自拍| а√在线中文网新版地址在线| 亚洲欧美一区二区激情| 136福利视频导航| 亚洲h动漫在线| 日韩一卡二卡在线观看| av毛片久久久久**hd| 久久精品影视大全| 在线高清一区| 一区二区三区久久网| 国产精品qvod| 91在线看www| 国模套图日韩精品一区二区| 久热国产精品视频| 黄色在线网站| 亚洲国产精品va在线看黑人动漫| 中文字幕视频二区| 精品国产乱码久久久久久天美 | 亚洲一区二区三区观看| 夜夜嗨一区二区三区| 三年中文高清在线观看第6集 | 国产一区二区三区四| 欧美老熟妇喷水| 欧美黄色精品| 亚洲成人蜜桃| 校园春色另类视频| www.一区二区三区| 四虎国产精品永久在线国在线| 57pao成人国产永久免费| av网址在线看| 日韩视频―中文字幕| 加勒比一区二区三区在线| 亚洲第一福利网站| 精品久久久中文字幕人妻| 在线亚洲一区观看| 国产精品视频一区在线观看| 一区二区三区高清在线| 免费看特级毛片| 中文字幕不卡在线播放| 欧美激情aaa| 99久久精品国产观看| 18禁一区二区三区| 国产乱码精品一区二区三区忘忧草 | 成人77777| 亚洲少妇激情视频| 青春草在线观看 | 中文成人无字幕乱码精品区| 国产精品1024久久| 久久久国产精品久久久| 国产一区999| 欧美激情第四页| 国产在线乱码一区二区三区| 久久久久久久久久久久91| 日韩激情在线观看| 麻豆av免费在线| 久久国产欧美| 欧美日韩在线不卡视频| 免费日韩av片| 50路60路老熟妇啪啪| 久久久国产精品一区二区中文| 精品人妻一区二区三区四区在线 | 中文字幕综合网| 一区二区国产精品精华液| 亚洲视频一区在线| 国产精品成人免费观看| 一区二区三区四区在线播放| 亚洲色婷婷一区二区三区| 亚洲综合激情小说| 国产在线观看99| 欧美日韩美女视频| 午夜精品一区二| 欧美无砖专区一中文字| 一道本无吗一区| 欧美一区二区啪啪| 午夜精品在线播放| 亚洲国产精品网站| 国产女主播在线直播| 中文字幕精品在线视频| 麻豆影视国产在线观看| 美日韩精品视频免费看| 午夜av在线播放| 欧美一乱一性一交一视频| 九九九伊在线综合永久| 成人看片人aa| 国产精品15p| 欧美深深色噜噜狠狠yyy| 成人精品电影| 国产欧美精品aaaaaa片| 欧美亚洲自偷自偷| 最新免费av网址| 成人精品高清在线| 中文字幕av久久爽一区| 亚洲免费观看高清| 啦啦啦免费高清视频在线观看| 欧美日韩你懂得| 日韩永久免费视频| 亚洲香蕉在线观看| 色呦呦在线观看视频| 91成人在线播放| 日韩精品一级毛片在线播放| 国产高清不卡av| 成人激情免费视频| 国产九九九九九| 久久精品国产一区二区三区免费看| 性生交大片免费看l| 日本一区二区免费在线观看视频 | 国产一区二区三区黄| 精品视频久久| 日日噜噜夜夜狠狠久久丁香五月| 亚洲片区在线| 欧美丝袜在线观看| 久久午夜色播影院免费高清| 午夜激情福利网| 欧洲一区在线电影| 水莓100国产免费av在线播放| 久久九九免费视频| 日本成人伦理电影| 国产欧美一区二区三区另类精品 | 久久精品夜色噜噜亚洲a∨| 男女性高潮免费网站| 色8久久人人97超碰香蕉987| 亚洲精品久久久久久无码色欲四季 | 久久精品理论片| 37p粉嫩大胆色噜噜噜| 一区二区三区丝袜| ,一级淫片a看免费| 国产午夜精品视频免费不卡69堂| 国内在线视频| 91在线播放国产| 日韩成人综合| 又色又爽又高潮免费视频国产| 成人18视频日本| 丰满少妇被猛烈进入一区二区| 在线精品视频小说1| 天天摸天天干天天操| 欧美日韩国产第一页| 亚洲精品一区二区在线播放∴| 欧美日韩精品一区| 国产欧美一区二区三区国产幕精品| 少妇高潮一69aⅹ| 中文字幕视频一区二区三区久| 国产一卡二卡三卡| 亚洲人成在线观看网站高清| 美女av在线免费看| 国产不卡一区二区在线观看| 中文字幕免费一区二区三区| 97超碰人人爽| 亚洲青青青在线视频| 一级做a爱片久久毛片| 中文字幕日韩在线观看| 亚洲成人一区在线观看| 日本成人三级| 日韩国产欧美在线观看| 天天躁日日躁aaaa视频| 欧美午夜精品久久久久久浪潮| 日本黄色大片视频| 97精品国产aⅴ7777| 天堂va在线高清一区| 日韩欧美一级在线| 国产精品99久久久久久久女警| 欧美成人三级在线观看| 日韩西西人体444www| 日韩伦理电影网站| 国产精品对白一区二区三区| 激情综合自拍| 短视频在线观看| 欧美在线一二三四区| 亚洲成人三级| 亚洲free性xxxx护士白浆| 婷婷伊人综合| 波多野结衣三级视频| 亚洲国产日韩一区二区| 无套内谢的新婚少妇国语播放| 91爱视频在线| 成人毛片在线| a在线观看免费视频| 国产精品对白交换视频 | 国产高清一区日本| 免费观看一级视频| 精品无人区太爽高潮在线播放| 桃色一区二区| 色中文字幕在线观看| 懂色av噜噜一区二区三区av| 久久久久久久久久免费视频| 亚洲视频在线免费看| 日韩黄色三级在线观看| 被灌满精子的波多野结衣| www亚洲一区| 亚洲视频在线免费播放| 欧美成人免费全部观看天天性色| 国产香蕉精品| 国产精品igao| 亚洲综合一二区| 日本福利在线观看| 成人精品在线观看| 国产欧美一区二区色老头| 91免费在线看片| 日韩高清av一区二区三区| jizz亚洲女人高潮大叫| 国产高清www| 国产欧美一区二区三区在线老狼| a天堂中文在线观看| 欧美亚洲成人精品| 亚洲成人免费| 中文字幕被公侵犯的漂亮人妻| 91精品国产综合久久久蜜臀粉嫩| 国产理论在线| 亚洲综合五月天| 91农村精品一区二区在线| 国产精品乱码久久久| 亲爱的老师9免费观看全集电视剧| 天天射综合网视频| 亚洲精品乱码久久久久久久久久久久|