用Python+XPath爬取linux命令

爬取的目标

Linux命令大全(手册)

用到的工具

语言:Python
解析库:lxml
查询语言:Xpath

XPath相关知识

在线Xpath测试平台
XPath菜鸟教程

开始爬取数据

最后需要的得到JSON格式

{
	"name":,
	"usage":,
	"params":[
		{"param":,"content":}
	]
}

目标网站首页给出了一个命令的列表,我们需要得到每一个命令子页面的url
在这里插入图片描述
将源代码复制到xpather上,可以方便测试写出的XPath是否正确
在这里插入图片描述
得到解析出子页面url的XPath


//div[contains(@class,'column col-half')]/ul/li[@class='format-standard']/a/@href

在子页面中提取要爬取的数据
在这里插入图片描述
usage

//p/strong[contains(text(),"语法格式:")]/parent::node()/text()

params

//article//table//td

python代码

import requests
from lxml import etree

data=[]
html = requests.get("https://www.linuxcool.com/").text
content = etree.HTML(html)
urls = content.xpath("//div[contains(@class,'column col-half')]/ul/li[@class='format-standard']/a/@href")[:-2]

def deal_suburl(it,url):
    it['params']=[]
    html=requests.get(url).text
    content=etree.HTML(html)
    usage=content.xpath('//p/strong[contains(text(),"语法格式")]/parent::node()/text()')
    it['usage']=usage
    params=content.xpath('//article//table//td/text()')
    for index in range(int(len(params)/2)):
        tmp={}
        tmp['param']=params[2*index].strip()
        tmp['content']=params[2*index+1].strip()
        it['params'].append(tmp)
    

for url in urls:
    it={}
    it['name']=url.split('/')[-1]
    deal_suburl(it,url)
    data.append(it)

写入文件

import json


file_name ='data.json'
with open(file_name,'w',encoding='UTF-8') as f:
    f.write(json.dumps(data,ensure_ascii=False))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值