当我们解析网页后, 往往面对繁杂的源代码而无从下手, 有时候明明知道我们想要的数据就在里面, 可是应该如何把冗余的部分去除而只保留我们想要的那一个部分呢
在这里和大家一起学习一下选择的方法
1, 正则表达式
真的是无奈之举的时候才会想到要去正则, 因为它除非格式标准, 否则每次搜索都要重新的绘制 pattern
在 python 中一般导入 re 模块
那么最常用的就比如说 re,findall(匹配的模板, 匹配的对象)[0]
匹配的模板中基本上就是 r'<title>(.*?)<title>'
模板的基本上就是你抓到的源码, 你可以把它赋值给变量
.*? 是万能匹配, 如果加上括号就是选中其中内容保存下来
配合 w3c 理解:
- http://deerchao.net/tutorials/regex/regex.htm 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
举例 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+')
来源: https://www.cnblogs.com/xingnie/p/9635947.html