Scrapy|python之Scrapy 的Xpath常用定位相关

xpth通过text值获取定位并提取同级节点text

  • 联系人:
    李先生
  • 电      话:
    0371-88888888
  • 手      机:
    18188888888
  • 传      真:
    0371-88888888
  • 地      址:
    河南 郑州 中原区 大学科技园X座XX层
  • 客      服:

response.xpath("//div[@class='lef-bd']//dt[contains(text(),'联系人')]/following-sibling::dd").extract_first("")

获取到“联系人”同级节点的 李先生

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
【Scrapy|python之Scrapy 的Xpath常用定位相关】
CMD快速测试xpath,在安装了scrapy的虚拟环境下运行命令:
scrapy shell http://xxx.xxx.com

可运行命令进行测试提取结果:
>>> tite = response.xpath('//div[@class="entry-header"]/h1/text()').extract() >>> tite >>> ['5 款 Linux 街机游戏']

这样就提取出数组形式的结果,可以通过访问数组来获取成员:
>>> tite.extract()[0]

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
提取h1标签的值
tite = response.xpath('//div[@class="entry-header"]/h1/text()')

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
遇到如:日期·版块·分类在一起的这种(http://blog.jobbole.com/114636/)
2019/01/11 ·IT技术·Linux

使用命令:
response.xpath('//p[@class="entry-meta-hide-on-mobile"]/text()').extract()[0 ].strip().replace("·","")

==命令解释==
extract()[0]= 提取数组成员
strip()= 去除空格
.replace("·","")= 将“·”替换为空
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
通过contains函数 搜索包含某个属性值的xptah
1 赞

命令:
response.xpath("//span[contains(@class,'vote-post-up')]/h10/text()")将值直接转换为int类型int(response.xpath("//span[contains(@class,'vote-post-up')]/h10/text()").extract()[0])

==命令解释==
//标签中 [搜索(@class包含'vote-post-up')]/h10/的值
需要将值转换为int类型直接 int(.....)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

遇到如:156 收藏这种数字+文字或字母的,需要用re正则进行替换(CMD命令:ipython)
In [6]: m = re.match(".*?(\d+).*","156 收藏")In [7]: if m: ...:print(m.group(1)) ...: 156

==命令解释==
m = re.match(“正则表达式”,“内容”)
if m:(判断如果有值)
print(m.group(1)) (获取第1个)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    推荐阅读