如何在Scrapy爬虫中提取HTML结构里href属性内的链接值
解决方法
问题原因
- 要提取HTML标签的属性值,需要在XPath表达式末尾追加
/@属性名语法,你当前的写法直接匹配到a标签节点,get()就会返回完整的标签字符串 - 循环内的XPath用
//开头会全局匹配整个页面的元素,不会限定在当前遍历的article节点内,会导致所有循环返回的都是页面第一个匹配的结果,需要改成.//开头限定查询范围为当前节点内部
修正后代码
import scrapy class scraping(scrapy.Spider): name = 'NewsSpider' start_urls = ['https://www.uol.com.br/'] def parse(self, response): news = response.xpath('//article') for n in news: # 提取到的href如果是相对路径,可以用response.urljoin()转为绝对路径 link = n.xpath(".//a[@class='hyperlink headlineSub__link']/@href").get() print({ 'Link': link, 'Title': n.xpath('.//a/div/h3/text()').get(), })
补充说明
如果提取到的链接是相对路径(没有域名前缀),可以把link替换为response.urljoin(link)即可得到可直接访问的完整链接。
内容的提问来源于stack exchange,提问作者NMCherry132
相关产品推荐
相关产品推荐

