Scrapy:使用相同的规则重新爬行

时间:2015-07-02 09:39:46

标签: python scrapy

我正在使用scrapy从tripAdvisor中提取评论。

我的start_urls是酒店。例如:

http://www.tripadvisor.com/Hotel_Review-g60763-d80075-Reviews-Amsterdam_Court_Hotel-New_York_City_New_York.html#REVIEWS.

从这些页面我正在使用以下规则抓取到评论页面:

rules = (
    Rule(SgmlLinkExtractor(allow=("ShowUserReviews-g.*",), restrict_xpaths=('//*[@id="REVIEWS"]/div[4]/div/div[2]/div/div/div[1]/a',), unique=True), callback='parse_item', follow= True),

    Rule(SgmlLinkExtractor(allow=("ShowUserReviews-g.*",),restrict_xpaths=('//*[@id="REVIEWS"]/div[contains(@class,"deckTools btm")]',),unique=True),callback='parse_item',follow=True),
)

评论页面的示例:

http://www.tripadvisor.com/ShowUserReviews-g187514-d228523-r275442835-Hotel_Petit_Palace_Arturo_Soria-Madrid.html#REVIEWS

在每个评论页面的末尾都有这家酒店的下一个评论页面的链接,编号如下:1,2,3,4 .....我可以使用相同的规则,我认为,下一个地址是类似。

按照此打印屏幕:

http://s16.postimg.org/w68m82ouc/Screenshot_from_2015_07_02_12_36_03.jpg

我的问题:

  1. 规则抓取的工作原理是什么?刮刀可以使用相同的规则重新爬行到下一个评论页面吗?我需要别的东西吗?

  2. 如何避免抓取我之前看到的评论页面? 例如,从第3页爬到第1页和第2页。?

  3. 感谢

1 个答案:

答案 0 :(得分:1)

过滤"下一步"站点在规则中的下一个站点。这样可以避免访问已访问过的评论网站。

Rule(SgmlLinkExtractor(allow=("ShowUserReviews-g.*",), restrict_xpaths=('//*[@id="REVIEWS"]/div[4]/div/div[2]/div/div/div[1]/a[text() = "Next"]',), unique=True), callback='parse_item', follow= True)