我正在使用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
我的问题:
规则抓取的工作原理是什么?刮刀可以使用相同的规则重新爬行到下一个评论页面吗?我需要别的东西吗?
如何避免抓取我之前看到的评论页面? 例如,从第3页爬到第1页和第2页。?
感谢
答案 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)