爬取51工作网 xpath的基本用法

import requests
from fake_useragent import UserAgent
from lxml import etree
agent = UserAgent()
url = "http://search.51job.com/list/171900%252C020000%252C010000%252C030200%252C040000,000000,0000,00,9,99,Python,2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare="
response = requests.get(
    url,
    headers={"User-Agent":agent.random}
)
response.encoding = response.apparent_encoding
root = etree.HTML(response.text)
div_list = root.xpath("//div[@class='dw_table']/div[@class='el']")
for div in div_list:
    money = div.xpath("span[@class='t4']/text()")
    # if not money:
    #     money = '面议'
    # else:
    #     money = money[0]
    #下面一句简化以上四句
    money = money[0] if money else"面议"
    print(money)
    #找工作名称
    #工作名称不可能为空,,所以不用判断
    a = div.xpath("p/span/a")[0]
    job_name = a.xpath("text()")[0].strip()
    job_href = a.xpath("@href")[0]
    print(job_name)
    date_time = div.xpath("span[@class='t5']/text()")
    date_time = date_time[0] if date_time else  "没有时间"
    print(date_time)
    #表格的后缀csv
    # with open("job.csv","a",encoding="gb18030") as f:
    #     f.write(job_name+","+date_time+","+money+"\n")
    with open("job.csv","a",encoding="gb18030") as f:
        job_list = [job_name,date_time,money,'\n']
        f.write(','.join(job_list))










# -*- coding:utf-8 -*-
"""
1.网页的解析方式
1)xpath(简单)
2)正则(最难)
3)css(需要懂网页的css)
4)bs4(比xpath难一点点)

2.xpath的基本用法
1)环境准备:
    火狐浏览器(版本不能太高)
    以及两个插件:firehug   firepath
2)基本操作
//元素标签名,
例如,//div  查找网页内的所有的div

//元素标签名[@属性名='具体内容']
例如://div[@class='box'] 查找class为box的div

//元素标签名[第几个]
例如://div[@class='box'][2],查找符合条件的第二个div
#为什么数字为1时会出现三个数据

//元素1/元素2/元素3......
例如://ul/li/div/a/img  查找ul下的li下的div下的a下的img标签

//元素1/@属性名
例如://ul/li/div/a/img/@src查找ul下的li下的div下的a下的img
标签的src属性

//元素/text()
例如://a/text(),获取a标签之间的文本(一级文本)

//元素//text()
例如://div[@class='box']//text(),获取class为box所有文本

//元素[contains(@属性名,'相关属性值')]
例如://div[contains(@class,'l')]
查找class中包含l的div

//*[@属性='值']
例如://*[@name='lisi'] 查找所有name为lisi的元素

"""




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值