如何使用response.css在scrapy中获取一个元素

时间:2018-04-19 17:38:18

标签: python-3.x web-scraping scrapy

我正试图从

获得价值=“3474636382675”

<input class="lst" value="3474636382675" title="Zoeken" autocomplete="off" id="sbhost" maxlength="2048" name="q" type="text"&GT;

我试过

response.css(".lst >value").extract()

这个有效,但我得到了所有东西,我只需要价值。

response.css(".lst").extract()

3 个答案:

答案 0 :(得分:4)

使用CSS,您可以选择所需的属性:

response.css(".lst::attr(value)").extract()

您可以更多地了解Scrapy的documentation

中的选择器

答案 1 :(得分:0)

我用漂亮的汤来解析HTML。这是一个从雅虎财务中获取股票价格的例子。

import urllib.request
from bs4 import BeautifulSoup

def getPrice(tag):
    source = "https://finance.yahoo.com/quote/"+tag
    filehandle = urllib.request.urlopen(source)
    soup = BeautifulSoup(filehandle.read(), "html.parser")
    priceSpan = soup.findAll("span", { "class" : "Fz(36px)" })
    for k in priceSpan:
        return(k.getText())

def getDayChange(tag):
    source = "https://finance.yahoo.com/quote/"+tag
    filehandle = urllib.request.urlopen(source)
    soup = BeautifulSoup(filehandle.read(), "html.parser")
    priceSpan = soup.findAll("span", { "class" : "Fw(500)" })
    for k in priceSpan:
        return(k.getText())

https://gist.github.com/Krewn/0e624d35c396df63262dd42d74f2beb6

答案 2 :(得分:0)

对css不太确定。但来自另一个SO答案的here is one。或者尝试xpath:

response.xpath('//input[@class="lst"]/@value').extract()

或者如果您只需要一个值:

response.xpath('//input[@class="lst"]/@value').extract_first()