我想知道如何从http://quotes.toscrape.com/的第一页提取引用和作者,只有当作者的名字不是阿尔伯特爱因斯坦。
<div class="quote">
<span class="text">
"some quote"
</span
<span>
"by "
<small class="author">Albert Einstein</small>
</span>
<span class="text">
"some quote"
</span
<span>
"by "
<small class="author">J.K. Rowling</small>
</span>
我已经做了一些搜索,我能找到的最接近的东西是这些职位,但这些只是指不刮,如果属性不等于的东西,而不是如果值不等于的东西。
1 XPath for elements with attribute not equal or does not exist
2 Xpath test for ancestor attribute not equal string
3 How to use "not" in xpath?
4 Using not() in XPath
我现在有…
class AllSpider(scrapy.Spider):
name = 'working'
start_urls = [
'http://quotes.toscrape.com/',
]
def parse(self, response):
divs = response.xpath("//div[@class='quote']")
for div in divs:
l = ItemLoader(item=AllItems(), selector=div)
l.add_xpath('title', ".//span[@class='text']/text()")
l.add_xpath('name', ".//small[@class='author']/text()")
yield l.load_item()
class AllItems(scrapy.Item):
link = scrapy.Field()
title = scrapy.Field()
name = scrapy.Field()
domain = scrapy.Field()
并尝试了以下方法,但它似乎没有做任何事情,我得到了与没有添加代码相同的结果。任何帮助将不胜感激!!!我能想到的唯一的其他方法是post crawl,当我可以使用pandas过滤输出的.csv文件时,但是如果有一种方法可以通过scrapy来做到这一点,我很想学习它!
def parse(self, response):
divs = response.xpath("//div[@class='quote']")
for div in divs:
l = ItemLoader(item=AllItems(), selector=div)
if l.add_xpath('name', ".//small[@class='author']/text()") != 'Albert Einstein':
l.add_xpath('title', ".//span[@class='text']/text()")
l.add_xpath('name', ".//small[@class='author']/text()")
yield l.load_item()
2条答案
按热度按时间00jrzges1#
所以我试了一下,我发现最好的方法是这两种方法中的一种。第一个是如果你有一个单一的值过滤掉,而第二个是如果你有一个值列表,你想过滤掉。感谢所有帮助我的人!!!
或
insrf1ej2#
尝试复制并粘贴以下内容: