Nicht sicher, wie XPath auf einen bestimmten website-element
Ich bin derzeit versuchen zu verwenden, Scrapy, durch zu gehen der Elite Gefährlich subreddit und sammeln post-Titel, urls und Stimme zählt. Ich habe die ersten beiden gut, aber bin unsicher, wie schreiben Sie einen XPath-Ausdruck für den Zugriff auf die abgegebenen Stimmen.
selector.xpath('//div[@class="score unvoted"]').extract()
funktioniert, aber es gibt Stimme zählt für alle Beiträge, die auf der aktuellen Seite (und nicht für jeden einzelnen post). response.css('div.score.unvoted').extract()
Arbeitet für jeden einzelnen post, aber zurück [u'<div class="score unvoted">1</div>']
, statt nur 1. ( Ich würde auch wirklich gerne wissen, wie dies mit XPath! 🙂 )
Code ist wie folgt:
class redditSpider(CrawlSpider): # http://doc.scrapy.org/en/1.0/topics/spiders.html#scrapy.spiders.CrawlSpider
name = "reddits"
allowed_domains = ["reddit.com"]
start_urls = [
"https://www.reddit.com/r/elitedangerous",
]
rules = [
Rule(LinkExtractor(
allow=['/r/EliteDangerous/\?count=\d*&after=\w*']), # Looks for next page with RE
callback='parse_item', # What do I do with this? --- pass to self.parse_item
follow=True), # Tells spider to continue after callback
]
def parse_item(self, response):
selector_list = response.css('div.thing') # Each individual little "box" with content
for selector in selector_list:
item = RedditItem()
item['title'] = selector.xpath('div/p/a/text()').extract()
item['url'] = selector.xpath('a/@href').extract()
# item['votes'] = selector.xpath('//div[@class="score unvoted"]')
item['votes'] = selector.css('div.score.unvoted').extract()
yield item
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie auf dem richtigen Weg. Der erste Ansatz braucht nur zwei Dinge:
text()
am EndeFeste version:
Und, FYI, können Sie die zweite option funktioniert auch mithilfe der
:: - text
pseudo-element:sollte diese Arbeit -