我无法让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
答案 0 :(得分:1)
第二次尝试更接近于提取值。但是,您需要从节点中提取文本,而不是从文档根目录中提取文本:
s_item['schedule'] = sel.select('/div/text()').extract()[0]
如果文档包含更多标签(不是 div ),您可以尝试:
s_item['schedule'] = sel.select('//div/text()').extract()[0]