Notebook
  • Study hard and make progress every day
  • Mouka
    • Windows Internal
      • Helper Functions(todo:)
      • Find Kernel Module Address
      • Patch Guard Oops
      • Hook SSDT(Shadow)
      • Restore SSDT(Shadow)
      • Misc
        • Volatile in C
    • AntiCheat
      • Inject Defense
      • Injection Method
    • DriverDevelopment
      • 20180625
      • 20180626-27
    • Python
      • Python Tricks
        • 内置 http 服务器
        • 函数作为变量
        • "is" vs "=="
        • 直接变量值交换
        • 计算代码执行时间
        • 函数参数分解
        • 打印Python字典
        • 命名元组代替class
        • get()方法访问字典
        • 字典排序
        • 一次检查多个标志
        • 合并两个字典
        • re.sub使用替换函数
    • Algorithms
      • Greedy
        • 使括号平衡的最小交换次数
        • 埃及分数
      • DynamicProgramming
        • 0-1 背包问题
      • LeetCode
        • Count Primes
  • Honey
    • Python笔记
      • lxml库
      • os库
      • json文件读写
      • Scrapy
        • Scrapy安装与开始项目
        • Scrapy-Xpath
Powered by GitBook
On this page
  • 标签[1]与extract_first()
  • as=response.xpath(//*/div[@class="guide"])
  • 利用for循环,对上述符合条件的节点进行筛选
  • re模块的替换
  • xpath选择某标签的属性值
  • 打开json文件必须在同一目录
  • 选取属于 bookstore 子元素的最后一个 book 元素
  • 选取带有属性的div节点
  • 分层次过滤节点
  • 元素的兄弟节点
  1. Honey
  2. Python笔记
  3. Scrapy

Scrapy-Xpath

标签[1]与extract_first()

标签[1]的覆盖范围更广泛,比如

//div[@class=title]/a[1]   #所有div标签中的第一个a
//div[@class=title]/a.extract_first()  #所有的div标签下的a标签构成的列表的第一个元素

as=response.xpath(//*/div[@class="guide"])

xpath返回的迭代器有三个部分

[<Selector xpath='descendant-or-self::title' data='<title>Quotes to Scrape</title>'>]
  • extract()函数则是把其中的data部分全部提取出来,是一个列表;

  • extract_first()返回符合条件的第一个数据;

  • as=response.xpath('//*/div[@class="guide"]/text()').extract()加入text后,可以去掉元素的标签

  • 全部孩子节点“//”;

  • 直接孩子节点“/”

  • '*' 返回全部符合条件的节点进入列表。

利用for循环,对上述符合条件的节点进行筛选

# 在使用extract之前才可以继续筛选
as=response.xpath('//*/div[@class="guide"]')
for a in as:
     a.xpath("p/text()")

re模块的替换

re.sub(正则表达式,替换成的部分,字符串);

sub是贪心算法,会匹配到最长的模式,在正则表达式中加入”?“则使用最短匹配方式;寻找最近的<>之间来替换

a = re.sub(r'<.*?>', '', a)

xpath选择某标签的属性值

answer_xpath.xpath("center/img/@src").extract()

打开json文件必须在同一目录

with open("C:\\Users\\daiyifan\\pclady_wiki\\pclady_wiki\\wiki_url.json","r",encoding="utf-8") as js:
    wiki_url=json.load(js)

选取属于 bookstore 子元素的最后一个 book 元素

/bookstore/book[last()]

选取带有属性的div节点

/div[@*]

分层次过滤节点

as=response.xpath("//*/div/p")
for a in as:
     i=a.xpath("span").extract()
     j=a.xpath("@href").extract()

元素的兄弟节点

following-sibling::p #后兄弟节点P,属于xpath的轴

PreviousScrapy安装与开始项目

Last updated 6 years ago