我正在使用ma项目XYZ
我被困在从源中提取文本
<a href="/gifts" class="title" data-tracking-id="mdd-heading">gifts</a>
我想把href视为内容
我试过这个
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from XYZ.items import XYZ
class MySpider(BaseSpider):
name = "main"
allowed_domains = ["XYZ"]
start_urls = ["XYZ"]
def parse(self, response):
hxs = HtmlXPathSelector(response)
titles = hxs.select("//a[@data-tracking-id='mdd-heading']")
items = []
for titles in titles:
item = XYZ()
item ["title"] = titles.select("text()").extract()
item ["link"] = titles.select("@href").extract()
items.append(item)
print "www.xyz.com"+str(item["link"])
return items
而output
是
www.xyz.com[u'/gifts']
我期待输出为
www.xyz.com/gifts
我做错了什么......?
答案 0 :(得分:1)
根据Selector
's extract()
的文档:
提取物()
序列化并返回匹配的节点作为unicode列表 字符串。编码内容百分比不加引号。
所以,extract()
返回一个列表,你需要它的第一个项目。使用item['link'][0]
。
此外,代码中还有其他问题:
for titles in titles
循环没有意义,你需要一个单独的循环变量HtmlXPathSelector
已弃用,请使用Selector
urljoin()
加入网址的部分以下是包含修复和其他改进的完整代码:
from urlparse import urljoin
from scrapy.spider import BaseSpider
from scrapy.selector import Selector
from XYZ.items import XYZ
class MySpider(BaseSpider):
name = "main"
allowed_domains = ["XYZ"]
start_urls = ["XYZ"]
def parse(self, response):
titles = response.xpath("//a[@data-tracking-id='mdd-heading']")
for title in titles:
item = XYZ()
item ["title"] = title.xpath("text()").extract()[0]
item ["link"] = title.xpath("@href").extract()[0]
print urljoin("www.xyz.com", item["link"])
yield item