'''
Description: 代码供参考学习使用
'''
from __future__ import annotations
import os
import platform
import pandas as pd
from bs4 import BeautifulSoup
from tqdm import tqdm # 进度条库
from base_spider import BaseSpider
from base_url_item import UrlItem
class Tao365Spider(BaseSpider):
# 采集365淘房二手房信息
target_url = "http://nj.sell.house365.com/district/p1.html" # 采集目标链接
list_data_file = 'tao365_list.csv' # 采集数据保存的文件
url_items: list[UrlItem] = [] # 采集链接数组
PAGE_START = 1 # 采集开始页码
PAGE_STEP = 5 # 采集步长
def __init__(self):
# 初始化日志
self.init_log()
# 默认采集的上一页为第 1 页
start_page = self.PAGE_START
list_file_path = self.fileManger.get_data_file_path(self.list_data_file)
if os.path.isfile(list_file_path):
# 读取列表文件, 确定上一次采集的第几页, 以支持连续采集
self.logger.info("数据文件存在")
self.data_file_exist = True
# 计算从第几页开始采集
list_df = pd.read_csv(list_file_path, usecols=['第几页'], encoding=self.encoding)
max_page = pd.DataFrame(list_df[2:]).max()
start_page = int(max_page) + 1
print("采集页面范围: 第[%s]页至第[%s]页" % (start_page, start_page + self.PAGE_STEP - 1))
for page in range(start_page, start_page + self.PAGE_STEP):
# 初始化采集链接
url = self.target_url.replace("p1", "p" + str(page))
# 构造采集对象
url_item = UrlItem(url=url, page=page)
self.url_items.append(url_item)
def crawl_data(self):
for url_item in tqdm(self.url_items):
# 采集数据
url = url_item.url
self.logger.debug("当前采集页面信息: %s", url)
# 发送请求, 获取数据
page_content = self.get_content_from_url(url)
# 解析数据
page_data = self.parse_page(page_content, url_item)
self.logger.debug("采集数据量: %s", len(page_data))
# 保存数据到文件
cols = ['标题', '标题链接', '房源id', '图片', '第几页']
self.save_to_file(page_data, cols)
# 防止反爬, 随机休眠一段时间
self.sleep_random()
def parse_page(self, content, url_item: UrlItem):
# 利用BeautifulSoup标准库,解析页面信息
soup = BeautifulSoup(content, 'lxml')
# 初始化数组
datalist = []
for element in soup.find_all("div", attrs={'class': 'listItem'}):
# 解析单条信息
# 判断是否为有效数据
if element.img.has_attr("data-original"):
# 依次解析, 标题, 标题链接, 房源id, 图片
title = element.find("a", class_='listItem__title').text.strip()
title_link = element.find("a", class_='listItem__title')['href']
house_id = element.find("a", class_='listItem__title')['house-id']
image = element.img["data-original"]
datalist.append([title, title_link, house_id, image, url_item.page])
return datalist
def run(self):
self.logger.debug("采集开始")
self.crawl_data()
self.logger.debug("采集结束")
if __name__ == '__main__':
print("采集365淘房二手房信息")
spider = Tao365Spider()
spider.run()
print("python 版本", platform.python_version())
没有合适的资源?快使用搜索试试~ 我知道了~
Python 如何实现采集二手房列表信息并存储文件
共15个文件
pyc:6个
py:4个
gitignore:3个
需积分: 16 2 下载量 52 浏览量
2023-01-06
15:16:49
上传
评论
收藏 28KB ZIP 举报
温馨提示
一、实战场景 Python 如何实现采集二手房列表信息并存储文件 二、知识点 • python 基础语法 • python 文件读写 • BeautifulSoup 网页解析 • requests 发送网络请求 • tqdm 进度条
资源推荐
资源详情
资源评论
收起资源包目录
tao01-Python如何实现采集二手房列表信息并存储文件.zip (15个子文件)
data
.gitignore 14B
tao365_list.csv 45KB
spiders
base_spider.py 3KB
base_url_item.py 449B
spider_tao365_list.py 4KB
file_manager.py 1KB
logs
spider.log 2KB
.gitignore 14B
.gitignore 23B
__pycache__
base_url_item.cpython-310.pyc 733B
base_url_item.cpython-39.pyc 712B
file_manager.cpython-39.pyc 2KB
file_manager.cpython-310.pyc 2KB
base_spider.cpython-310.pyc 2KB
base_spider.cpython-39.pyc 2KB
共 15 条
- 1
资源评论
菜鸟实战
- 粉丝: 1196
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功