爬虫之css选择器、xpath选择器、正则 三种提取数据方法的用法

css选择器、xpath选择器、正则三种提取数据的用法:

Xpath选择器的用法:

路径表达式 结果
/ 从根目录开始 必须具有严格的父子关系
// 从当前标签 后续节点含有即可选出
* 通配符,匹配任何元素节点。
//div/book[1]/title 选择div下第一个book标签的title元素
//div/book/title[@lang=‘zh’] 选择title属性的含有lang且内容是zh的title元素
//div/book/title //book/title 具有相同的结果,因为使用相对路径最终都指向title
//book/title/@* 将title所有属性值选择出来
//book/title/text() 将title的内容选择出来。
//a[@href=“link1.html” and @id=“places_neighbours_row”] 将符合这两种数据的所有a标签选出来
//div/book[last()]/title/text() 将book最后一个元素选出
//div/book[price>39]/title 将book子标签price数值大于39的选择出来
//li[starts-with(@class,“item”)]/a/text() 将class属性前缀是item的li标签选出来
//title[contains(@lang,‘eng’)] 将title属性lang含有eng关键字的标签选出

CSS选择器用法:

路径表达式 结果
a.home 选择class=home的标签
a#game 选择id= game 的标签
a >span 选择标签的所有子标签span
a span 选择标签的所有 标签span

详细参考链接(菜鸟css教程):http://www.runoob.com/cssref/css-selectors.html

正则的用法:
爬虫之css选择器、xpath选择器、正则 三种提取数据方法的用法

下面就进行实战练习:

第一种:lxml.html 提取数据

例如提取下面图片中的面积:
爬虫之css选择器、xpath选择器、正则 三种提取数据方法的用法

# 首先requests.get发出请求
 response=requests.get('http://example.webscraping.com/places/default/view/China-47')
 content= response.text
 
1、正则
#  下面两种正则匹配都可以
res = re.compile(r'Area: </label></td><td class="w2p_fw">(.*?) square kilometres</td>')
# res = re.compile(r'<tr id="places_area__row">.*?<td class="w2p_fw">(.*?)</td>')
results = res.findall(content)[0]
print(resluts)

2、xpath选择器
tree = lxml.html.fromstring(result)
html_data = tree.xpath('//tr[@id="places_languages__row"]/td[@class="w2p_fw"]/text()')

3、css选择器
tree = lxml.html.fromstring(result)
td=tree.cssselect('tr#places_languages__row>td.w2p_fw')[0]

上面三种方法都可以得到Area的内容,其他的可以练习一下获取其他内容,使用这三种方法。
下面图片是我使用xpath对这个链接其他内容的提取:可以自己尝试一下
爬虫之css选择器、xpath选择器、正则 三种提取数据方法的用法

2、第二种:selenium 提取数据方法:
selenium主要是一种模拟游览器的自动化方法,可以自动进行一系列动作,比如百度:进去百度页面–》自动输入搜索的内容----》自动搜索

这个需要下载安装一下geckodriver插件:https://blog.****.net/hy_696/article/details/80114065

#  需要导入的包
import time
from selenium import webdriver
from  selenium.webdriver.firefox.options import Options as FOptions
from  selenium.webdriver.common.action_chains import ActionChains

# executable_path='D:/geckodriver.exe'    这个里面写的是你geckodriver.exe的绝对路径,根据自己而定
options = FOptions()
brower=webdriver.Firefox(executable_path='D:/geckodriver.exe',firefox_options=options)

#   以百度为例子
brower.get('https://www.baidu.com')
input_element = brower.find_element_by_id('kw')
input_element.send_keys('iPhone')
time.sleep(3)
#  css选择器方法
#button=brower.find_element_by_id('su')
#  xpath选择器方法
button = brower.find_elements_by_xpath('//input[@id="su"]')[0]
button.click()
time.sleep(10)
# brower.close()

这个方法就是首先进入到百度页面,然后右键检查元素,找到输入框 input的id,或者是代表唯一的它的属性就可以,同理找到百度一下这个button按钮,之后click()就ok了。
3、scrapy框架里面使用response提取数据:

如果对scrapy框架了解不深的可以阅读一下该教程:http://www.scrapyd.cn/doc/178.html

css提取方法:http://www.scrapyd.cn/doc/185.html
xpath提取方法:http://www.scrapyd.cn/doc/186.html