无法让Scrapy返回Div中的文字

时间:2016-03-18 15:05:26

标签: python xpath scrapy scrapy-spider

我无法让scrapy从这个div中返回文本。当它确实返回数据时,它比我想象的还要多。

目标HTML:

<div class="DivTimeSpan" title="Full Time">12:00 PM - 09:00 PM </div>

尝试1:

    def parse_schedule(self, response):
    s_item = ScheduleItem()

    for sel in response.xpath("//div[@class='DivTimeSpan']"):
        s_item['schedule'] = sel.select('//text()').extract()
    return s_item

返回:

  

&#34; \ r \ n \ r \ n&#34;,&#34; \ r \ n&#34;,&#34; \ r \ n \ r \ n \ n \ r \ n var allowedUrls = []; \ r \ nennerUrls.push(\&#34; Login.net \&#34;); \ r \ nennerUrls.push(\&#34; Login \&#34;); \ r \ n allowedUrls.push(\&#34; AccountLogin.net \&#34;); \ r \ nennerUrls.push(\&#34; AccountLogin \&#34;); \ r \ nennerUrls.push (\&#34; CreateAccount \&#34;); \ r \ nennerUrls.push(\&#34; CreateAccount.net \&#34;); \ r \ nennerUrls.push(\&#34; UpdateAccount \&#34;); \ r \ nennerUrls.push(\&#34; UpdateAccount.net \&#34;); \ r \ nennerUrls.push(\&#34; CreateResellersAccount \&#34; ); \ r \ nennerUrls.push(\&#34; CreateResellersAccount.net \&#34;); \ r \ nennerUrls.push(\&#34; CreateQqestSAASAccount \&#34;); \ r \ n
  &#34; 11:00 AM - 09:00 PM&#34;,&#34; 12:00 PM - 09:00 PM&#34;,&#34; 12:00 PM - 09:00 PM&#34; ,&#34; 12:00 PM - 09:00 PM&#34;,&#34; 12:00 PM - 09:00 PM&#34;

整个文件可能长达数千行,并且包含了我指定的div之外的文本

我理解// text()返回元素及其子元素的文本。我定位的html元素没有任何子节点,所以我认为它只会返回div中的数据。

接下来我尝试使用&#34; / text()&#34;。这是唯一的改变

尝试2:

    for sel in response.xpath("//div[@class='DivTimeSpan']"):
        s_item['schedule'] = sel.select('/text()').extract()
    return s_item

返回:

  

[{&#34; schedule&#34;:[]}]

期望的结果:

  

[{&#34; schedule&#34;:[&#34; 11:00 AM - 09:00 PM&#34;,&#34; 12:00 PM - 09:00 PM&#34;,& #34;下午12:00    - 09:00 PM&#34;,&#34; 12:00 PM - 09:00 PM&#34;,&#34; 12:00 PM - 09:00 PM&#34;]}]

我抓取的网址是公司登录的背后,因此我无法提供实际网址。

以利沙的帖子引导我朝着正确的方向前进,谢谢! :) 回答:

for sel in response.xpath("//div[@class='DivTimeSpan']"):
    s_item['schedule'] = map(unicode.strip,    sel.select('//div/text()').extract())
return s_item

1 个答案:

答案 0 :(得分:1)

第二次尝试更接近于提取值。但是,您需要从节点中提取文本,而不是从文档根目录中提取文本:

s_item['schedule'] = sel.select('/div/text()').extract()[0]

如果文档包含更多标签(不是 div ),您可以尝试:

s_item['schedule'] = sel.select('//div/text()').extract()[0]