• 最让人头疼的清洗数据过程----选择合适的方式快速命中所需的数据


    当我们解析网页后,往往面对繁杂的源代码而无从下手,有时候明明知道我们想要的数据就在里面,可是应该如何把冗余的部分去除而只保留我们想要的那一个部分呢

    在这里和大家一起学习一下选择的方法

    1、正则表达式

    真的是无奈之举的时候才会想到要去正则,因为它除非格式标准,否则每次搜索都要重新的绘制pattern

    在python中一般导入re模块

    那么最常用的就比如说              re,findall(匹配的模板,匹配的对象)[0]

    匹配的模板中基本上就是r'<title>(.*?)<title>'

    模板的基本上就是你抓到的源码,你可以把它赋值给变量

    .*?是万能匹配,如果加上括号就是选中其中内容保存下来

    配合w3c理解:

     http://deerchao.net/tutorials/regex/regex.htm

    2、xpath

    打开f12,在相应的地方我们点击,右键后copy,选择xpath路径

    基本上需要以下的模块

    from parsel import Selector

    import requests

    z = requests.get('网址')

    看一下z.text有没有我们要的内容

    sel = Selector(text = z.text)

    sel.xpath('//div[]@class= "content"]/span/text()').extract_first()

    //代表的是开头是绝对路径,而/则是按顺序下来

    @后面跟的是属性,一般是herf  src什么的

    比如sel.xpath('//@href').extract()

    '//comment()'一般就是用来获取注释

    p = getxpath(sample源码)

    那么遇到一行中跳段的数据怎么办?

    p.xpath('//li[position() = 1]'/text()').extract()

    .xpath('//li[1]'/text()').extract()

     奇数偶数位

    .xpath('//li[position() mod2= 1]'/text()').extract()

    .xpath('//li[position() mod2= 0]'/text()').extract()

    最后一个

    .xpath('//li[last()]'/text()').extract()

    子节点有a的

    .xpath('//li[a]'/text()').extract()

    子节点有a或h2的

    .xpath('//li[a or h2]'/text()').extract()

    子节点有a和h2的

    .xpath('//a/text()|//h2/text()').extract()

    a下herf以https开始

    //a[starts-with(@href,"https")]/text()

    还有

    //a[@href="https......")]/text()

    //li/a[@id="begin")]/text()

    //li/a[text()= "....")]/text()这个其实就是本身

    //li[2]/a[text()= "....")]/@herf这个就是满足了文本内容的herf的内容爬取了其中取第二个li里面的满足text的定位的herf

     总结下来就是基本上[]里面定位,后面再加上/和要找的名字

    找p下面所有的文字(包括那些加粗的什么的)

    'string(//.........)'

    找class中有content的

    .xpath(('//*[contains(@class,"content")]'/text()')).extract()

    也可以混入正则、css

    .xpath(('//*[contains(@class,"content")]'/text()')).re.('[a-c]').extract()

    .xpath(('//*[contains(@class,"content")]'/text()')).css.(.......).extract()

    。。。

    3.css

    http://www.w3school.com.cn/css/css_syntax_class_selector.asp

    举例 s4.css('.content-a(类名)::text').extract()

    对于<p id="xxx" href = python>sssssss<p>

    则s4.css('#xxx::attr(herf)')就得到了['python']

     其中xxx是标签,而attr里面是要获取的属性

    要点是    class是点,id是#,属性是attr

    你也可以尝试着将选择器结合起来

    s4.css('p#xxx).xpath('text()').extract()

    s4.css('p#xxx).xpath('text()').re.('w+')

  • 相关阅读:
    码农如何通过编程赚更多的钱
    理解 OAuth 2.0 认证流程
    把同事的代码重写得干净又整洁,老板却让我做回滚?
    精读《如何做好 CodeReview》
    互联网行业的软件与人员的代际更迭随想
    十大最佳自动化测试工具
    使用 docker 高效部署你的前端应用
    在Linux 命令行中转换大小写
    Python批量检测服务器端口可用性与Socket函数使用
    基于华为云CSE微服务接口兼容常见问题
  • 原文地址:https://www.cnblogs.com/xingnie/p/9635947.html
Copyright © 2020-2023  润新知