我正在更新本教程,因为它已过时:\ n \ n
http://mherman.org/blog/2012/11/05/scraping-web-pages-with-scrapy/#.VwpeOfl96Ul
它应该获取非营利组织Craigslist上每个职位列表的链接和标题。链接被获取,但标题不是。
这是此元素的页面代码:
<span class="pl">
<time datetime="2016-04-09 14:10" title="Sat 09 Apr 02:10:57 PM">Apr 9</time>
<a href="/nby/npo/5531527495.html" data-id="5531527495" class="hdrlnk">
<span id="titletextonly">Therapist</span>
这是抓取工具的代码:
def parse(self, response):
hxs = HtmlXPathSelector(response)
titles = hxs.xpath("//span[@class='pl']")
items = []
for titles in titles:
item = CraigslistSampleItem()
item["title"] = titles.select("a/text()").extract()
item["link"] = titles.select("a/@href").extract()
items.append(item)
return items
如果我检查Chrome中的元素并获取XPath,我会得到以下标题: // * [@ id =&#39; titletextonly&#39;],但这给了我整个标题列表,而不仅仅是链接的标题列表(在这种情况下,我应该得到&#39; / nby / npo /5531527495.html'用于链接,&#39;治疗师&#39;用于标题)
我知道这一行
item["title"] = titles.select("a/text()").extract()
需要更新,但是如果我输入//*[@id='titletextonly']
我会得到每一个标题,所以我已经关闭了,但我不知道如何获得XPath以及#title titleonon&# 39;在&#39; href&#39;元件。
我是Scrapy和Xpath的新手,所以请在评论中说实话。
谢谢。
答案 0 :(得分:1)
如下所示更改Xpath以遍历&#39; span&#39; 标记。
item["title"] = titles.select("a/span/text()").extract()
答案 1 :(得分:1)
a/text()
只会选择a
元素的直接子元素的文本元素。您想要的文本不是a
元素的子文件;它在span
。
我没有使用scrapy,但我建议尝试这个:
item["title"] = titles.select("a").extract()
这应该得到a
元素的字符串值,其中包含其中的所有文本。
如果这不起作用,您也可以尝试:
item["title"] = titles.select("a//text()").extract()