検索
ホームページバックエンド開発Python チュートリアル上海で家を借りるために、Python を使用して 20,000 件以上の住宅情報を一晩で調べました。

最近、急な仕事の変更により、新しいオフィスの場所が現在の住居から遠方になったため、新しい家を借りることになりました。

私は代理店の eMule に乗って、街の奇妙な場所を探索し始めました。

上海で家を借りるために、Python を使用して 20,000 件以上の住宅情報を一晩で調べました。

さまざまなレンタルアプリを切り替える過程で、効率が非常に低いため、非常に心配しました。

まず第一に、私は一緒に住んでいるからです。私のガールフレンド 一緒に、2 人は同時に職場までの距離を考慮する必要がありますが、各プラットフォームの通勤時間に基づいて家を検索する機能は比較的役に立ちません。一部のプラットフォームは同時に複数の場所の選択をサポートしていません。また、プラットフォームによっては各拠点からの通勤距離を機械的にしか取得できないため、同じ継続時間の地点では利用ニーズに応えられません。

第二に、賃貸人の観点から見ると、賃貸プラットフォームが多すぎて、各プラットフォームのフィルタリングと並べ替えロジックが一貫していないため、類似した物件の情報を水平的に比較することが困難です。

でも、それは問題ではありません。プログラマーとして、問題を解決するにはプログラマーの方法を使用する必要があります。そこで、昨夜、Python スクリプトを使用して、上海エリアの賃貸プラットフォームのすべての住宅情報を取得しました。合計 20,000 件以上ありました。はクロール データです。プロセス全体が全員と共有されます。

ページを分析してエントリ ポイントを見つける上海で家を借りるために、Python を使用して 20,000 件以上の住宅情報を一晩で調べました。

まず、プラットフォームの賃貸ページに入ります。ホームページ上の住宅リストには、必要な情報のほとんどがすでに含まれていることがわかります。情報は DOM から直接取得できるため、シミュレートされたリクエストを通じて Web ページ データを直接収集することを検討してください。

https://sh.lianjia.com/zufang/

#次のステップは、URL を取得する方法を検討することです。観察の結果、この地域には2万戸以上の住宅が存在することが判明しましたが、ウェブページからアクセスできるデータは最初の100ページまでであり、各ページに表示される件数の上限は30件です。合計3k、全ての情報を取得することは不可能です。

上海で家を借りるために、Python を使用して 20,000 件以上の住宅情報を一晩で調べました。

#しかし、フィルター条件を追加することでこの問題を解決できます。フィルター項目で「静安」を選択し、次の URL を入力します。

https://sh.lianjia.com/zufang/jingan/

上海で家を借りるために、Python を使用して 20,000 件以上の住宅情報を一晩で調べました。

このエリアには 2,000 軒以上の家があり、その数が多いことがわかります。データ ページは 75 です。1 ページあたり 30 エントリがあるため、理論的にはすべてのデータにアクセスできます。したがって、各地区の住宅データを個別に取得することで、市内のすべてのデータを取得できます。

https://sh.lianjia.com/zufang/jingan/pg2/

2ページ目ボタンをクリック後、上記のURLを入力すると、pg以降の数字を変更すれば該当するページ番号を入力できることがわかります。

上海で家を借りるために、Python を使用して 20,000 件以上の住宅情報を一晩で調べました。しかし、ここで問題が発生し、同じページ数を訪問するたびに取得されるデータが異なるため、収集されるデータが重複してしまいます。そこで、並べ替え条件の「棚にある最新」をクリックして、次のリンクを入力します:

https://sh.lianjia.com/zufang/jingan/pg2rco11/

この並べ替え方法で得られるデータの順序は安定しています。この時点で、私たちの考え方は次のとおりです。小さな領域の最初のページを個別に取得し、最初のページまでの現在の領域の最大ページ数を取得し、各ページにアクセスしてすべてのデータを取得するシミュレートされたリクエストにアクセスします。

データのクローリング

アイデアを思いついた後、コードを書き始める必要があります。まず、すべてのリンクを収集する必要があります。コードは次のとおりです:

# 所有小地区对应的标识
list=['jingan','xuhui','huangpu','changning','putuo','pudong','baoshan','hongkou','yangpu','minhang','jinshan','jiading','chongming','fengxian','songjiang','qingpu']
# 存放所有链接
urls = []
for a in list:
urls.append('https://sh.lianjia.com/zufang/{}/pg1rco11/'.format(a))
# 设置请求头,避免ip被ban
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.9 Safari/537.36'}
# 获取当前小地区第1页的dom信息
res = requests.get('https://sh.lianjia.com/zufang/{}/pg1rco11/'.format(a), headers=headers)
content = res.text
soup = BeautifulSoup(content, 'html.parser')
# 获取当前页面的最大页数
page_num = int(soup.find('div', attrs={'class': 'content__pg'}).attrs['data-totalpage'])
for i in range(2,page_num+1):
# 将所有链接保存到urls中
urls.append('https://sh.lianjia.com/zufang/{}/pg{}rco11/'.format(a,i))

その後は、一つずつ行う必要があります 前のステップで取得した URL を処理して、リンク内のデータを取得します コードは次のとおりです:

num=1
for url in urls:
print("正在处理第{}页数据...".format(str(num)))
res1 = requests.get(url, headers=headers)
content1 = res1.text
soup1 = BeautifulSoup(content1, 'html.parser')
infos = soup1.find('div', {'class': 'content__list'}).find_all('div', {'class': 'content__list--item'})

データを整理してファイルをエクスポート

ページ構造を観察することで、各要素の保存場所を取得し、対応するページ要素を見つけて、必要な情報を取得できます。

完全なコードはここに添付されています。興味のある友人は、必要に応じてリンク内の地域識別子と小さな地域識別子を置き換えて、独自の情報を取得できます。あなたの地域について。他のレンタルプラットフォームのクローリング方法はほとんど同様であるため、詳細は説明しません。

import time, re, csv, requests
import codecs
from bs4 import BeautifulSoup

print("****处理开始****")
with open(r'..sh.csv', 'wb+')as fp:
fp.write(codecs.BOM_UTF8)
f = open(r'..sh.csv','w+',newline='', encoding='utf-8')
writer = csv.writer(f)
urls = []

# 所有小地区对应的标识
list=['jingan','xuhui','huangpu','changning','putuo','pudong','baoshan','hongkou','yangpu','minhang','jinshan','jiading','chongming','fengxian','songjiang','qingpu']
# 存放所有链接
urls = []
for a in list:
urls.append('https://sh.lianjia.com/zufang/{}/pg1rco11/'.format(a))
# 设置请求头,避免ip被ban
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.9 Safari/537.36'}
# 获取当前小地区第1页的dom信息
res = requests.get('https://sh.lianjia.com/zufang/{}/pg1rco11/'.format(a), headers=headers)
content = res.text
soup = BeautifulSoup(content, 'html.parser')
# 获取当前页面的最大页数
page_num = int(soup.find('div', attrs={'class': 'content__pg'}).attrs['data-totalpage'])
for i in range(2,page_num+1):
# 将所有链接保存到urls中
urls.append('https://sh.lianjia.com/zufang/{}/pg{}rco11/'.format(a,i))

num=1
for url in urls:
# 模拟请求
print("正在处理第{}页数据...".format(str(num)))
res1 = requests.get(url, headers=headers)
content1 = res1.text
soup1 = BeautifulSoup(content1, 'html.parser')
# 读取页面中数据
infos = soup1.find('div', {'class': 'content__list'}).find_all('div', {'class': 'content__list--item'})

# 数据处理
for info in infos:
house_url = 'https://sh.lianjia.com' + info.a['href']
title = info.find('p', {'class': 'content__list--item--title'}).find('a').get_text().strip()
group = title.split()[0][3:]
price = info.find('span', {'class': 'content__list--item-price'}).get_text()
tag = info.find('p', {'class': 'content__list--item--bottom oneline'}).get_text()
mixed = info.find('p', {'class': 'content__list--item--des'}).get_text()
mix = re.split(r'/', mixed)
address = mix[0].strip()
area = mix[1].strip()
door_orientation = mix[2].strip()
style = mix[-1].strip()
region = re.split(r'-', address)[0]
writer.writerow((house_url, title, group, price, area, address, door_orientation, style, tag, region))
time.sleep(0)
print("第{}页数据处理完毕,共{}条数据。".format(str(num), len(infos)))
num+=1

f.close()
print("****全部完成****")

いくつかの操作の後、私たちはさまざまな地元の賃貸プラットフォームの完全な住宅情報を入手しました。この時点で、いくつかの基本的なフィルタリング方法を通じて必要なデータをすでに取得できています。

以上が上海で家を借りるために、Python を使用して 20,000 件以上の住宅情報を一晩で調べました。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は51CTO.COMで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
PythonスクリプトがUNIXで実行されない可能性がある一般的な理由は何ですか?PythonスクリプトがUNIXで実行されない可能性がある一般的な理由は何ですか?Apr 28, 2025 am 12:18 AM

PythonスクリプトがUNIXシステムで実行できない理由には、次のものが含まれます。1)CHMOD XYOUR_SCRIPT.PYを使用して実行権限を付与する不十分な権限。 2)shebangラインが正しくないか欠落している場合、#!/usr/bin/envpythonを使用する必要があります。 3)環境可変設定が誤っていない場合、OS.Environデバッグを印刷できます。 4)間違ったPythonバージョンを使用して、Shebangラインまたはコマンドラインでバージョンを指定できます。 5)仮想環境を使用して依存関係を分離する依存関係の問題。 6)構文エラー、python-mpy_compileyour_script.pyを使用して検出します。

Pythonアレイを使用することがリストを使用するよりも適切なシナリオの例を挙げてください。Pythonアレイを使用することがリストを使用するよりも適切なシナリオの例を挙げてください。Apr 28, 2025 am 12:15 AM

Pythonアレイの使用は、リストよりも大量の数値データの処理に適しています。 1)配列を保存するメモリを保存します。2)アレイは数値的な値で動作するのが高速です。3)アレイフォースタイプの一貫性、4)アレイはCアレイと互換性がありますが、リストほど柔軟で便利ではありません。

Pythonでリストと配列を使用することのパフォーマンスへの影響は何ですか?Pythonでリストと配列を使用することのパフォーマンスへの影響は何ですか?Apr 28, 2025 am 12:10 AM

listSareのより良い前提条件とmixdatatypes、whilearraysares優れたスナリカル計算砂の砂を大きくしたデータセット。

Numpyは、大きな配列のメモリ管理をどのように処理しますか?Numpyは、大きな配列のメモリ管理をどのように処理しますか?Apr 28, 2025 am 12:07 AM

numpymanagesmemoryforlargearrayseffictificleusing biews、copies、andmemory-mappedfiles.1)rewsinging withotingcopying、directmodifying theoriginalArray.2)copiescanbecreatedwithcopy()methodforpreservingdata.3)Memory-MapplehandLemassiutasedatasetasedatasetasetasetasetasetasedas

モジュールのインポートが必要なのはどれですか:リストまたは配列は?モジュールのインポートが必要なのはどれですか:リストまたは配列は?Apr 28, 2025 am 12:06 AM

listsinpythondonotrequireimportingamodule、whilearrays fromthearraymoduledoneedanimport.1)listsarebuiltin、versatile、andcanholdmixeddatypes.2)araysaremoremory-efficient-fornumerumerumerumerumerumerdatabutでき、対象となるンドベフェフサメタイプ。

どのデータ型をPythonアレイに保存できますか?どのデータ型をPythonアレイに保存できますか?Apr 27, 2025 am 12:11 AM

Pythonlistscanstoreanydatatype,arraymodulearraysstoreonetype,andNumPyarraysarefornumericalcomputations.1)Listsareversatilebutlessmemory-efficient.2)Arraymodulearraysarememory-efficientforhomogeneousdata.3)NumPyarraysareoptimizedforperformanceinscient

Pythonアレイに間違ったデータ型の値を保存しようとするとどうなりますか?Pythonアレイに間違ったデータ型の値を保存しようとするとどうなりますか?Apr 27, 2025 am 12:10 AM

heouttemptemptostoreavure ofthewrongdatatypeinapythonarray、yure counteractypeerror.thisduetothearraymodule'sstricttypeeencultionyを使用します

Python Standard Libraryの一部はどれですか:リストまたは配列はどれですか?Python Standard Libraryの一部はどれですか:リストまたは配列はどれですか?Apr 27, 2025 am 12:03 AM

PythonListSarePartOfThestAndardarenot.liestareBuilting-in、versatile、forStoringCollectionsのpythonlistarepart。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。