第二章

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

目录

第二章

(九)抓取猪八戒数据

思路

第一步:拿到页面源代码

第二步:提取和解析数据

完整代码

补充


(九)抓取猪八戒数据

 

python爬晋江排行榜_HTML

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

python爬晋江排行榜_python爬晋江排行榜_02

发现数据在页面源代码里

 

思路:

  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源码

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

python爬晋江排行榜_python爬晋江排行榜_03

 

python爬晋江排行榜_爬虫_04

python爬晋江排行榜_HTML_05

# 定位到第一家商铺,其他循环即可
# 拿到每一个服务商的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')

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

python爬晋江排行榜_python爬晋江排行榜_06

# ./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:

python爬晋江排行榜_爬虫_07

 

python爬晋江排行榜_爬虫_08

 

运行后结果如下:

python爬晋江排行榜_HTML_09

 

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

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

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

用法:str.strip([chars])


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


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

python爬晋江排行榜_html_10

 

完整代码:

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)

python爬晋江排行榜_python爬晋江排行榜_11

 

补充:

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

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

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