Xpath插件的安装
链接:https://pan.baidu.com/s/1T3V11Ev8dPODa2fCRbeuCg
提取码:qvzf
将这个安装包解压缩
打开谷歌浏览器的扩展程序 ----> 打开开发者模式 ----> 点击加载已解压的扩展程序 ----> 选择解压的文件夹
看下图操作
就会出现这个
浏览器导航栏上也会出现X图标
点击图标就会弹出 再点击就会关闭(或者使用快捷键ctrl+shift+X) 会出现这样的黑框 左边写Xpath语法 右面是匹配到的结果 还可以看到匹配到的数量
需要自己去学习一下Xpath定位的语法 很简单的 这里就不赘述了
爬取重庆花溪附近的房源信息(进入正题啦~)
先看一下页面的样子,梳理下逻辑
列表页页面
列表页的分页按钮
详情页页面(点击列表页标题进入)
梳理下逻辑
我们先根据分页获得某一页的列表页,然后爬取列表页的房价,然后进入详情页,爬取详情页的下列信息
爬取数据的通用流程
- 根据url请求页面,获取页面响应对象(也就是下面代码中的html_obj = requests.get(url=url, headers=headers))
- 将页面响应对象转化为etree/parsel对象 (tree = etree.HTML(html_obj))
- 定位要爬取的数据 (tree.xpath(’…’))
- 获取数据
- 持久化存储
代码
终于到了心心念念,激动人心的时刻啦~~ 上代码!!!哈哈哈
写了注释了,不过多解释
from collections import defaultdict
import requests
import pandas as pd
from lxml import etree
import re
# 获取到分页url的一个统一格式
url_all = 'https://chongqing.anjuke.com/sale/p{}-rd1/?kw=%E8%8A%B1%E6%BA%AA#filtersort'
# 请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
}
def get_url_list(url):
'''获取url列表 用于分页获取内容'''
url_list = [url.format(i) for i in range(1, 21)] # 获取20页
return url_list
def get_page_etree(url, headers):
'''得到页面的etree对象'''
html_obj = requests.get(url=url, headers=headers)# 根据url请求页面,获取页面响应对象html_obj
html_obj = html_obj.content.decode() # 解决乱码问题
tree = etree.HTML(html_obj) # 转化为页面的etree对象
return tree
def get_data(tree):
"""获取一页的房子数据"""
# 建立字典
info_dicts = defaultdict(list)
# 定位到一页列表页的所有li标签
li_list = tree.xpath('//ul[@id="houselist-mod-new"]/li&#