【第二章(完)-6】Python爬虫教程(xpath案例之爬取猪八戒网信息)

本课程共五个章节,课程地址:

【Python爬虫教程】花9888买的Python爬虫全套教程2021完整版现分享给大家!(已更新项目)——附赠课程与资料_哔哩哔哩_bilibili


第二章

  1. 数据解析概述
  2. 正则表达式
  3. re模块
  4. 手刃豆瓣TOP250电影信息
  5. bs4解析-HTML语法
  6. bs4解析-bs4模块安装和使用
  7. 抓取让你睡不着觉的图片
  8. xpath解析
  9. 抓取猪八戒数据

目录

第二章

(九)抓取猪八戒数据

思路

第一步:拿到页面源代码

第二步:提取和解析数据

完整代码

补充


(九)抓取猪八戒数据

 北京找saas外包服务_哪里能找兼职外包服务信息-猪八戒网

首先检查数据在不在源代码里: 

发现数据在页面源代码里

 

思路:

  1. 拿到页面源代码
  2. 提取和解析数据

第一步:拿到页面源代码

import requests

url = "https://beijing.zbj.com/search/service/?kw=saas&r=1"
resp = requests.get(url)
print(resp.text)

第二步:提取和解析数据

首先解析数据:

from lxml import etree

# 解析
html = etree.HTML(resp.text)   # .HTML()作用为加载html源码

以一家店铺为单位来提取数据,然后循环即可

 

# 定位到第一家商铺,其他循环即可
# 拿到每一个服务商的div
# 这里复制得到的xpath是
# //*[@id="__layout"]/div/div[3]/div/div[3]/div[4]/div[1]/div

divs = html.xpath('//*[@id="__layout"]/div/div[3]/div/div[3]/div[4]/div[1]/div')

以 价格 为例,查找它们之间的层级关系:

# ./div[3]/div[1]/span[1]

for div in divs:   # 每一个服务商信息
    price = div.xpath("./div[3]/div[1]/span[1]/text()")
    print(price)

注意这里为什么是 span[1] 而不是 span:

 

 

运行后结果如下:

 

而我们只想拿到其中的数字,代码改为:

    price = div.xpath("./div[3]/div[1]/span[1]/text()")[0].strip("¥").strip("狂欢价:¥").strip("万")    # [0]表示从列表里拿出来,strip()表示去掉

strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列

用法:str.strip([chars])

注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符

参考帖子:Python:strip() 函数_宁静致远*的博客-CSDN博客

再次运行后得到仅为数字的价格:

 

完整代码:

import requests
from lxml import etree

url = "https://beijing.zbj.com/search/service/?kw=saas&r=1"
resp = requests.get(url)
# print(resp.text)

# 解析
html = etree.HTML(resp.text)   # .HTML()作用为加载html源码

# 定位到第一家商铺,其他循环即可
# 拿到每一个服务商的div
divs = html.xpath('//*[@id="__layout"]/div/div[3]/div/div[3]/div[4]/div[1]/div')  # 由于相对路径里有"",所以外面要用''括起来,不能再用""
for div in divs:   # 每一个服务商信息
    price = div.xpath("./div[3]/div[1]/span[1]/text()")[0].strip("¥").strip("狂欢价:¥").strip("万")    # [0]表示从列表里拿出来,strip()表示去掉
    title = div.xpath("./div[3]/a/text()")[0]
    company_name = div.xpath("./a/div[2]/div[1]/div/text()")[0]
    print(company_name)

 

补充:

原视频中在对商品的 title 进行处理时,由于我们搜索的关键词为 “saas”,标题中的 "saas" 均被高亮,未被获取到,从而原视频中的代码在对 title 处理时做了一个 .join() 拼接处理

# 由于saas在原页面中做了高亮显示,所以没拿出来,但是可以拼接
title = "saas".join(div.xpath("./div/div/a[1]/div[2]/div[2]/p/text()"))

但可能因为网站改版了,这次爬取没有遇到这个问题,所以不需要进行这个处理,单纯记录一下~ 

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 19
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cheer_ego_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值