# City58
  58同城全国城市房屋信息爬虫,爬取内容包括:各行政区内小区的详情页数据、各小区内出租房和二手房的详情页数据。
## 抓取流程
1. 进入XA小区列表页面, 抓取各行政区编号,并初始化各行政区首页URL
2. 遍历抓取各行政区所有页面的小区详情页URL
3. 进入小区详情页,抓取小区名称、房价、地址等数据
4. 进入小区二手房列表页面, 翻页抓取所有二手房名称、房价、户型等数据
5. 进入小区出租房列表页面, 翻页抓取所有出租房详情页URL
6. 进入出租房详情页,抓取名称、房价、户型、地址、房屋类型等数据
## 第三方依赖
库 | 描述
:---:|:---:
Twisted | (最新)18.9.0
Pywin32 | [pywin32 官网](https://sourceforge.net/projects/pywin32/files/pywin32/Build%20221/)
  注意:
- Twisted 18.9.0 以下版本可能需要安装 微软 Visual C++ Build Tools
- Pywin32不可pip安装,必须去官网下载对应版本的.exe程序手动安装。
## 解释
  为方便调试程序,Spider 中设置仅抓取一个行政区内的第一个小区内的二手房和出租房列表首页中的所有房屋信息,可根据需要去掉注释或修改代码完成某个城市的房屋信息抓取。例如:
```Python
# 根据小区编号构造所有小区URL
for area_url in area_url_list:
yield Request(url=area_url,
callback=self.parse_xiaoqu_url_list,
errback=self.error_back,
priority=10)
# 测试仅抓取一个行政区
break
```
  为清晰展示 Spider 中的抓取结构,已将主要的解析代码块移入到了 utils.parse 模块中,结构如下:
```Python
def parse_xiaoqu_detail_page(response):
pass
def parse_ershoufang_list_page(response):
pass
def parse_chuzufang_detail_page(response):
pass
```
  58同城房屋信息的字体反爬主要存在于:小区列表页、二手房和出租房详情页。本次代码中涉及的字体反爬页面仅为 "出租房详情页",已处理。处理字体反爬的部分代码(utils.common)如下:
```Python
def handlefont(page_source, prase_string):
base64_str = re.findall("charset=utf-8;base64,(.*?)'\)", page_source)[0]
font = TTFont(BytesIO(base64.decodebytes(base64_str.encode())))
cmap_ = font['cmap'].tables[0].ttFont.tables['cmap'].tables[0].cmap
handled_string = []
try:
for char_ in prase_string:
......
return ''.join(handled_string)
except Exception as e:
_ = e
```
  若要抓取全国各大城市的房屋信息,需修改 settings.py 中 HOST 参数为列表类型,并添加城市名称英文小写,例如:北京 - bj。最后遍历该HOST列表即可。
  已实现的中间件:UA、Proxy、Retry。 已实现的管道:MysqlTwisted、Json。其他功能详见代码。
## 反反爬
- 挂代理。58同城的反爬措施主要为 IP 反爬,真机访问次数稍多就会被 ban 掉一段时间,所以代理是必不可少的,但同样会被 ban 掉不少。
- 随机UA。设置随机 User-Agent 可在一定程序上减轻58反爬。
- 下载延时。在已经实现上述两种反反爬措施的前提下,设置下载延时为0-1秒之间的随机数(最大可能保证抓取效率),可有效解决反爬。
## 部署
  代码已部署到本地 Scrapyd 服务器。若 Window 执行命令报错 "scrapyd-deploy 不是内部或外部命令,也不是可运行的程序",请移步:[解决方案](https://www.jianshu.com/p/457003a8dbc4)
## 运行
  除直接 run main.py 外,可切换至项目根目录下执行 Scrapyd API启动爬虫:
```
curl http://localhost:6800/schedule.json -d project=City58 -d spider=58
```
## 公告
  **本代码仅作学习交流,切勿用于商业用途,否则后果自负。若涉及58侵权,请邮箱联系,会尽快处理。**
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
资源推荐
资源详情
资源评论
收起资源包目录
58同城 (全国) 房屋信息爬虫.zip (24个子文件)
WGT-code
City58
__init__.py 0B
pipelines.py 2KB
main.py 84B
utils
__init__.py 0B
common.py 2KB
parse.py 5KB
__pycache__
parse.cpython-36.pyc 3KB
common.cpython-36.pyc 2KB
__init__.cpython-36.pyc 139B
spiders
__init__.py 161B
a58.py 8KB
__pycache__
__init__.cpython-36.pyc 141B
a58.cpython-36.pyc 5KB
items.py 941B
settings.py 3KB
__pycache__
pipelines.cpython-36.pyc 3KB
settings.cpython-36.pyc 1KB
middlewares.cpython-36.pyc 3KB
__init__.cpython-36.pyc 133B
items.cpython-36.pyc 1KB
middlewares.py 2KB
scrapy.cfg 268B
.gitignore 7B
README.md 4KB
共 24 条
- 1
资源评论
JJJ69
- 粉丝: 6233
- 资源: 5778
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功