Python 在Scrapy中,如何根据链接的URL与正则表达式的匹配进行选择
我正在尝试以可靠的方式刮取下载页面 我已经从命令行用Python 在Scrapy中,如何根据链接的URL与正则表达式的匹配进行选择,python,xpath,scrapy,Python,Xpath,Scrapy,我正在尝试以可靠的方式刮取下载页面 我已经从命令行用 scrapy shell http://www.apkmirror.com/apk/shareit-technologies-co-ltd/shareit-connect-transfer/shareit-3-0-38_ww-release/shareit-3-0-38_ww-android-apk-download/ 我目前正试图从顶部导航栏中删除开发者名称、应用程序名称和版本名称: 在本案例中,分别为“SHAREit Technolo
scrapy shell http://www.apkmirror.com/apk/shareit-technologies-co-ltd/shareit-connect-transfer/shareit-3-0-38_ww-release/shareit-3-0-38_ww-android-apk-download/
我目前正试图从顶部导航栏中删除开发者名称、应用程序名称和版本名称:
在本案例中,分别为“SHAREit Technologies Co.Ltd”、“SHAREit-转让与股份”和“3.0.38_ww”
到目前为止,我为开发人员名称提供了以下XPath表达式:
In [84]: response.xpath('//*[@class="site-header-contents"]//nav//a/text()').extract()[0]
Out[84]: u'SHAREit Technologies Co.Ltd'
对于应用程序和版本名称,我将分别用[1]
和[2]
替换[0]
。问题在于,使用数值指标并不被认为是良好的刮削实践
相反,我想在这些链接之间使用“真正”的区别功能:它们的URL包含不同数量的斜杠(/
)。我想定义一个自定义选择器,将a/@href
与正则表达式匹配,如果匹配,则返回a/text()
,但我不知道如何执行此操作。(例如,re
方法()似乎可用作extract()
的替代品,但不能“帮助”选择过程)
如何根据应用于
@href
s的自定义函数进行选择?首先,如果您从面包屑中提取数据,在这种情况下,这不一定是一种不好的做法。您可以保证面包屑订单始终是相同的-第一项是公司,第二项是产品,最后一项是版本-非常可预测尽管如此,您可能还是希望使用更可靠的xpath索引:
"//div/a[1]"
# would get first <a> node under <div>
"//div/a[last()]"
# would get last <a> node under <div>
查找包含一些不区分文本的正则表达式匹配项的
节点:
"//div[re:test(.//text(), 'foo.bar', 'i')]"
首先,在这种情况下,如果您从面包屑中提取数据,那么这不一定是一种不好的做法。您可以保证面包屑订单始终是相同的-第一项是公司,第二项是产品,最后一项是版本-非常可预测
尽管如此,您可能还是希望使用更可靠的xpath索引:
"//div/a[1]"
# would get first <a> node under <div>
"//div/a[last()]"
# would get last <a> node under <div>
查找包含一些不区分文本的正则表达式匹配项的
节点:
"//div[re:test(.//text(), 'foo.bar', 'i')]"