2017-07-25 29 views
0

我是網絡抓取和Scrapy的新手。我希望你能幫助我。Scrapy:從使用「id」選擇器而不是「class」的html標記中提取數據

我想從使用標籤的網頁中提取數據。通常,如果跨度標記使用的是類別,例如:

<span class="class_A>Hello, World!</span> 

我將使用以下代碼來檢索文本。

request.css('span.class_A::text').extract() 

然而,當一個html現在使用的「ID」,而不是一個「階級」,例如,

<span id="id_A>Hello, Universe!</span> 

下面的代碼不工作了。

request.css('span.id_A::text').extract() 

請幫忙!使用「id」提取數據的正確方法是什麼?

謝謝您的幫助!

回答

0

這是一種方法。

>>> HTML = ''' 
... <span id="id_A">Hello, Earth</span> 
... <span id="id_B">Hello, Universe</span> 
... ''' 
>>> from scrapy.selector import Selector 
>>> selector = Selector(text=HTML) 
>>> selector.css('[id="id_A"]::text').extract() 
['Hello, Earth'] 

另外,

>>> HTML = ''' 
... <span id="id_A">Hello, Earth</span> 
... <span id="id_B">Hello, Universe</span> 
... ''' 
>>> from scrapy.selector import Selector 
>>> selector = Selector(text=HTML) 
>>> selector.css('span#id_A::text').extract() 
['Hello, Earth'] 

Scrapy使用cssselect隨後W3 Selectors Level 3

+0

嗨,謝謝。如何在不輸入html代碼的情況下執行此操作? –

+0

請參閱編輯。 –

1

的問題是,您使用的是 「類選擇」(請this僅供參考)。你應該真的使用「ID選擇器」,這應該工作:

response.css('#id_A::text').extract() 
+0

嗨,謝謝。但是,這仍然是一個空的清單。 –

+0

什麼,我試了多次。它不起作用。現在,當我用另一個具有不同ID的跨度進行嘗試時,它工作正常。然後,我用這個再次嘗試它,它已經工作了?剛剛發生了什麼?當我回顧一切時,它們都是一樣的。但是,非常感謝!我對你的幫助很滿意。它幫助了我很多,但我仍然在試圖弄清楚發生了什麼。 –

相關問題