用python的xpath方法获取贝壳二手房网站柯桥区域的前十页的每条二手房,在详情页面抓取标题、小区名称、单价、总价、房屋户型、楼层情况、面积、装修情况、朝向、建造年代、有无电梯、小区名称、所在区域、产权年限、产权性质,最后全部写入csv文件,加入反爬措施
时间: 2023-09-16 21:07:54 浏览: 80
首先需要安装相关库:requests、lxml、csv 和 time。代码如下:
```python
import requests
from lxml import etree
import csv
import time
# 请求头信息
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
# 反爬虫措施
session = requests.Session()
session.headers.update(headers)
# url模板
url_template = 'https://hz.ke.com/ershoufang/keqiao/pg{}/'
# 存储数据的列表
data_list = []
# 遍历前10页
for i in range(1, 11):
url = url_template.format(i)
# 获取页面数据
response = session.get(url)
html = etree.HTML(response.text)
# 获取每个房源详情页面的url
detail_urls = html.xpath('//div[@class="info clear"]/div[@class="title"]/a/@href')
for detail_url in detail_urls:
# 获取详情页面数据
response = session.get(detail_url)
html = etree.HTML(response.text)
# 解析数据
title = html.xpath('//h1[@class="main"]/text()')[0]
community = html.xpath('//div[@class="communityName"]/a[1]/text()')[0]
unit_price = html.xpath('//span[@class="unitPriceValue"]/text()')[0]
total_price = html.xpath('//span[@class="total"]/text()')[0]
house_info = html.xpath('//div[@class="room"]/div[@class="mainInfo"]/text()')[0]
floor_info = html.xpath('//div[@class="room"]/div[@class="subInfo"]/text()')[0]
area = html.xpath('//div[@class="area"]/div[@class="mainInfo"]/text()')[0]
decoration = html.xpath('//div[@class="subInfo"][1]/text()')[0]
orientation = html.xpath('//div[@class="subInfo"][2]/text()')[0]
year = html.xpath('//div[@class="subInfo"][3]/text()')[0]
elevator = html.xpath('//div[@class="subInfo"][4]/text()')[0]
community_name = html.xpath('//div[@class="areaName"]/span[@class="info"]/a[1]/text()')[0]
location = html.xpath('//div[@class="areaName"]/span[@class="info"]/a[2]/text()')[0]
limit = html.xpath('//div[@class="base"]/div[@class="content"][4]/text()')[0]
property_type = html.xpath('//div[@class="base"]/div[@class="content"][5]/text()')[0]
# 存储数据
data_list.append([title.strip(), community.strip(), unit_price.strip(), total_price.strip(), house_info.strip(),
floor_info.strip(), area.strip(), decoration.strip(), orientation.strip(), year.strip(),
elevator.strip(), community_name.strip(), location.strip(), limit.strip(), property_type.strip()])
# 防止访问过快被封IP
time.sleep(1)
# 将数据写入csv文件
with open('keqiao.csv', 'w', newline='', encoding='utf-8-sig') as f:
writer = csv.writer(f)
writer.writerow(
['标题', '小区名称', '单价', '总价', '房屋户型', '楼层情况', '面积', '装修情况', '朝向', '建造年代', '有无电梯', '小区名称', '所在区域',
'产权年限', '产权性质'])
writer.writerows(data_list)
```
以上代码中,我们使用 xpath 方法来获取页面数据。同时,我们给请求加上了反爬虫措施,使用了会话保持和时间间隔等方法。最后将数据写入 csv 文件。
阅读全文