记一次python 爬虫爬取深圳租房信息的过程及遇到的问题

作者:不迁徙候鸟 时间:2022-03-22 02:09:02 

为了分析深圳市所有长租、短租公寓的信息,爬取了某租房公寓网站上深圳区域所有在租公寓信息,以下记录了爬取过程以及爬取过程中遇到的问题:

爬取代码:


import requests
from requests.exceptions import RequestException
from pyquery import PyQuery as pq
from bs4 import BeautifulSoup
import pymongo
from config import *
from multiprocessing import Pool

client = pymongo.MongoClient(MONGO_URL)  # 申明连接对象
db = client[MONGO_DB]  # 申明数据库

def get_one_page_html(url):  # 获取网站每一页的html
 headers = {
   "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
          "Chrome/85.0.4183.121 Safari/537.36"
 }
 try:
   response = requests.get(url, headers=headers)
   if response.status_code == 200:
     return response.text
   else:
     return None
 except RequestException:
   return None

def get_room_url(html):  # 获取当前页面上所有room_info的url
 doc = pq(html)
 room_urls = doc('.r_lbx .r_lbx_cen .r_lbx_cena a').items()
 return room_urls

def parser_room_page(room_html):
 soup = BeautifulSoup(room_html, 'lxml')
 title = soup.h1.text
 price = soup.find('div', {'class': 'room-price-sale'}).text[:-3]
 x = soup.find_all('div', {'class': 'room-list'})
 area = x[0].text[7:-11]  # 面积
 bianhao = x[1].text[4:]
 house_type = x[2].text.strip()[3:7]  # 户型
 floor = x[5].text[4:-2]  # 楼层
 location1 = x[6].find_all('a')[0].text  # 分区
 location2 = x[6].find_all('a')[1].text
 location3 = x[6].find_all('a')[2].text
 subway = x[7].text[4:]
 addition = soup.find_all('div', {'class': 'room-title'})[0].text
 yield {
   'title': title,
   'price': price,
   'area': area,
   'bianhao': bianhao,
   'house_type': house_type,
   'floor': floor,
   'location1': location1,
   'location2': location2,
   'location3': location3,
   'subway': subway,
   'addition': addition
 }

def save_to_mongo(result):
 if db[MONGO_TABLE].insert_one(result):
   print('存储到mongodb成功', result)
   return True
 return False

def main(page):
 url = 'http://www.xxxxx.com/room/sz?page=' + str(page)  # url就不粘啦,嘻嘻
 html = get_one_page_html(url)
 room_urls = get_room_url(html)
 for room_url in room_urls:
   room_url_href = room_url.attr('href')
   room_html = get_one_page_html(room_url_href)
   if room_html is None:  # 非常重要,否则room_html为None时会报错
     pass
   else:
     results = parser_room_page(room_html)
     for result in results:
       save_to_mongo(result)

if __name__ == '__main__':
 pool = Pool() # 使用多进程提高爬取效率
 pool.map(main, [i for i in range(1, 258)])

在写爬取代码过程中遇到了两个问题:

(一)在get_room_url(html)函数中,开始是想直接return每个租房信息的room_url,但是return不同于print,函数运行到return时就会结束该函数,这样就只能返回每页第一个租房room_url。解决办法是:return 包含每页所有room_url的generator生成器,在main函数中用for循环遍历,再从每个room_url中获取href,传入到get_one_page_html(room_url_href)中进行解析。

(二)没有写第76行的if语句,我默认get_one_page_html(room_url_href)返回的room_html不为空,因此出现multiprocessing.pool.RemoteTraceback报错:

记一次python 爬虫爬取深圳租房信息的过程及遇到的问题

上图中显示markup为None情况下报错,点击蓝色"F:\ProgramFiles\anaconda3\lib\site-packages\bs4\__init__.py"发现markup为room_html,即部分room_html出现None情况。要解决这个问题,必须让代码跳过room_html is None的情况,因此添加 if 语句解决了这个问题。

最终成功爬取某租房公寓深圳市258页共4755条租房信息,为下一步进行数据分析做准备。

记一次python 爬虫爬取深圳租房信息的过程及遇到的问题

其中单条信息:

记一次python 爬虫爬取深圳租房信息的过程及遇到的问题

来源:https://www.cnblogs.com/chang2021/p/14021768.html

标签:python,爬虫,租房信息,深圳
0
投稿

猜你喜欢

  • 使用堆实现Top K算法(JS实现)

    2024-06-17 00:38:07
  • JavaScript转换与解析JSON方法实例详解

    2024-04-17 10:22:44
  • 关于Python的GPU编程实例近邻表计算的讲解

    2022-08-06 22:35:37
  • mysql 5.7.18 绿色版下载安装教程

    2024-01-20 02:23:30
  • 使用Tkinter制作信息提示框

    2023-12-15 02:13:30
  • python 显示数组全部元素的方法

    2021-03-20 13:15:01
  • Python + Requests + Unittest接口自动化测试实例分析

    2021-08-08 05:41:47
  • Python制作CSDN免积分下载器

    2021-12-25 03:46:35
  • go 字符串修改的操作代码

    2024-05-13 10:40:18
  • 对django 2.x版本中models.ForeignKey()外键说明介绍

    2022-10-07 18:18:24
  • python实现简单爬虫功能的示例

    2022-02-12 01:39:06
  • Python学习笔记之抓取某只基金历史净值数据实战案例

    2021-08-14 20:28:13
  • JavaScript实现简单贪吃蛇效果

    2023-08-13 05:48:08
  • 在Windows服务器下用Apache和mod_wsgi配置Python应用的教程

    2021-10-28 22:36:17
  • Javascript removeChild()删除节点及删除子节点的方法

    2023-07-02 05:30:22
  • 使用Django开发简单接口实现文章增删改查

    2023-02-12 22:29:37
  • python web.py启动https端口的方式

    2021-10-20 11:33:44
  • 简单方法实现Vue 无限滚动组件示例

    2023-07-02 16:50:14
  • 深度学习Tensorflow 2.4 完成迁移学习和模型微调

    2023-12-04 14:56:17
  • 教你用python提取txt文件中的特定信息并写入Excel

    2021-02-11 00:41:41
  • asp之家 网络编程 m.aspxhome.com