最近、急な仕事の変更により、新しいオフィスの場所が現在の住居から遠方になったため、新しい家を借りることになりました。
私は代理店の eMule に乗って、街の奇妙な場所を探索し始めました。
さまざまなレンタルアプリを切り替える過程で、効率が非常に低いため、非常に心配しました。
まず第一に、私は一緒に住んでいるからです。私のガールフレンド 一緒に、2 人は同時に職場までの距離を考慮する必要がありますが、各プラットフォームの通勤時間に基づいて家を検索する機能は比較的役に立ちません。一部のプラットフォームは同時に複数の場所の選択をサポートしていません。また、プラットフォームによっては各拠点からの通勤距離を機械的にしか取得できないため、同じ継続時間の地点では利用ニーズに応えられません。
第二に、賃貸人の観点から見ると、賃貸プラットフォームが多すぎて、各プラットフォームのフィルタリングと並べ替えロジックが一貫していないため、類似した物件の情報を水平的に比較することが困難です。
でも、それは問題ではありません。プログラマーとして、問題を解決するにはプログラマーの方法を使用する必要があります。そこで、昨夜、Python スクリプトを使用して、上海エリアの賃貸プラットフォームのすべての住宅情報を取得しました。合計 20,000 件以上ありました。はクロール データです。プロセス全体が全員と共有されます。
ページを分析してエントリ ポイントを見つける
https://sh.lianjia.com/zufang/
#次のステップは、URL を取得する方法を検討することです。観察の結果、この地域には2万戸以上の住宅が存在することが判明しましたが、ウェブページからアクセスできるデータは最初の100ページまでであり、各ページに表示される件数の上限は30件です。合計3k、全ての情報を取得することは不可能です。
https://sh.lianjia.com/zufang/jingan/
https://sh.lianjia.com/zufang/jingan/pg2/2ページ目ボタンをクリック後、上記のURLを入力すると、pg以降の数字を変更すれば該当するページ番号を入力できることがわかります。
しかし、ここで問題が発生し、同じページ数を訪問するたびに取得されるデータが異なるため、収集されるデータが重複してしまいます。そこで、並べ替え条件の「棚にある最新」をクリックして、次のリンクを入力します:
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 サイトの他の関連記事を参照してください。

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

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

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

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

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

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

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


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

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

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

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

ホットトピック









