Pages - Menu

2019年7月15日 星期一

[Scrapy]實戰番外篇 Part I

重新又看了另一本的Scrapy的書,
才發現又多了一些東西。
寫個筆記記錄一下..

以下繼續




1.在chomre開發者模式 的consle底下,
輸入$x(‘//h1’),可以測試xpath的語法
使用* 可選擇指定層級的所有元素
$x(‘//div/*’)


2.xpath的函示
contains   $x('//a[contains(@href, "iana")]')
           contains(text(),'ABC')
start-with    $x('//a[starts-with(@href, "http://www.")]')
not   $x('//a[not(contains(@href, "abc"))]')


3.範例
取得class屬性以reflist開頭的div中所有的超連結
//div[starts-with(@class,"reflist")]//a/@href
取得class為infobox的表格中第一張圖的url
//table[@class="infobox"]//img[1]/@src
取得每張圖片的url
//img/@src

4.scrapy shell url
接url的時候最好用雙引號包起來
scrapy shell “https://www.taaze.tw/rwd_searchResult.html?keyType%5B%5D=0&keyword%5B%5D=%E5%A6%96%E6%80%AA

5.取得元素屬性的值

使用 ::attr(屬性) 取值

response.css('div.info_frame>h4.titleMain::attr(title)')

6.要得真實的原文數據,需要使用extract()的函數

response.css('div.info_frame>h4.titleMain::attr(title)').extract()

7.要直接顯示可用

self.log("booksName:%s" % learn_node.css('h4.titleMain::attr(title)').extract())

接看,要注意,是%不是 ,
8.起始連結有很多組的話,覆寫start_request函數

def start_requests(self):
     source_url = "https://www.taaze.tw/rwd_searchResult.html?keyType%5B%5D=0&keyword%5B%5D="
     keywords=['妖怪公寓的優雅日常','四葉妹妹']
     for keyword in keywords:
         self.log("urlencode::: " + urlparse.quote(keyword))
         start_url = source_url + urlparse.quote(keyword)
         yield scrapy.Request(start_url)




如需看完整的程式碼,請至 Github


e.g.
XPath、XQuery 以及 XSLT 函數
選擇器(Selectors)

沒有留言:

張貼留言