Scrapy中古住宅情報+可視化データ分析
著者:xiaoyu微信公衆番号:Pythonデータ科学知乎:Pythonデータアナリスト
本編では,
Web構造解析
安居客のホームページ情報を中古住宅の情報源として採用している.中古住宅情報のページを直接クリックします.
各ページの住宅情報:
点開リンク後の詳細:
ブロガーは区域別に這い出すのではなく、ブロガーは直接すべて這い出し、次のページをループして完成した.手順は簡単です.次のようになります.まず各ページのすべての中古住宅の詳細なリンクを に登ります.は、各登った詳細なリンクを要求し、住宅情報 を解析する.すべての解析が完了すると、次のページへのリンク が要求される.は、戻るコンテンツが空の になるまでステップのループを返す.
Scrapyコード実装
データ構造の定義
爬虫解析は、 そして、 解析部は、 第1の 第2の
リクエスト中に速度が速すぎると、
データパージ
這い出した
コマンドライン実行
私たちは登ったデータを1つのファイルに出力したいです.
Scrapyでは
コマンドラインの
爬取開始:
データ可視化分析
データを取得すると、
次に、
各区の
効果図は以下の通りです.
まとめ
本編は簡単な例にすぎず、完全な効率的な爬虫類には多くの改善が必要である.エージェント に加入する. 増量式爬虫類考慮 ....
これらは後でゆっくり紹介して、終わります.
微信公衆番号Pythonデータ科学に注目し、
本編では,
scrapy
の実戦爬虫類プロジェクトを紹介し,爬虫類情報の簡単なデータ分析を行った.目標は
で、分析を開始します.Web構造解析
安居客のホームページ情報を中古住宅の情報源として採用している.中古住宅情報のページを直接クリックします.
各ページの住宅情報:
点開リンク後の詳細:
ブロガーは区域別に這い出すのではなく、ブロガーは直接すべて這い出し、次のページをループして完成した.手順は簡単です.次のようになります.
Scrapyコード実装
データ構造の定義
Scrapy
のメタデータfield
は、Pythonの
のデータ型を継承しており、使い勝手がよく、ブロガーは以下のコードに示すようにいくつかの住宅の情報を直接定義しています.もちろん高級な使い方もありますが、itemloader
に合わせてprocessor
を加え、ここでは簡単な定義だけを使えばいいです.class AnjukeItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
price = scrapy.Field()
mode = scrapy.Field()
area = scrapy.Field()
floor = scrapy.Field()
age = scrapy.Field()
location = scrapy.Field()
district = scrapy.Field()
pass
爬虫解析
Scrapy
に付随する爬虫類Spider
を継承することを定義する.name
は、Scrapy
全体の終始を貫き、後にその役割が見えます.start_urls
は初期要求のurlのリストであり、複数の初期urlがあってもよいが、ここでは1つしかない.Scrapy
のSpider
クラスではRequest
リクエストがデフォルトで使用されているため、ここではRequest
を上書きしないことを選択し、デフォルトリクエストを使用し、リクエストでparseコールバック関数を呼び出す.Scrapy
の上位selector
セレクタのxpath
で解析する.parse
関数要求には、ジェネレータを表す2つのyield
があります.yield
は、各ページの次のページリンクnext_pageurl
を返す.yield
は、各ページのすべての住宅詳細リンクを返し、再びRequest
がフォローを要求し、次のコールバック関数parse_detail
を呼び出す.リクエスト中に速度が速すぎると、
の入力が要求されます.ここではリクエスト速度が遅くなり、検証セクションは処理されません(後述).class AnjukeSpider(scrapy.Spider):
name = 'anjuke'
# custom_settings = {
# 'REDIRECT_ENABLED': False
# }
start_urls = ['https://beijing.anjuke.com/sale/']
def parse(self, response):
#
pass
# next page link
next_url = response.xpath(
'//*[@id="content"]/div[4]/div[7]/a[7]/@href').extract()[0]
print('*********' + str(next_url) + '**********')
if next_url:
yield scrapy.Request(url=next_url,
callback=self.parse)
#
num = len(response.xpath(
'//*[@id="houselist-mod-new"]/li').extract())
for i in range(1, num + 1):
url = response.xpath(
'//*[@id="houselist-mod-new"]/li[{}]/div[2]/div[1]/a/@href'
.format(i)).extract()[0]
yield scrapy.Request(url, callback=self.parse_detail)
parse_detail
コールバック関数では、itemloader
を使用してitems
の住宅情報を解析し、情報を載せたitem
を返します. def parse_detail(self, response):
houseinfo = response.xpath('//*[@class="houseInfo-wrap"]')
if houseinfo:
l = ItemLoader(AnjukeItem(), houseinfo)
l.add_xpath('mode', '//div/div[2]/dl[1]/dd/text()')
l.add_xpath('area', '//div/div[2]/dl[2]/dd/text()')
l.add_xpath('floor', '//div/div[2]/dl[4]/dd/text()')
l.add_xpath('age', '//div/div[1]/dl[3]/dd/text()')
l.add_xpath('price', '//div/div[3]/dl[2]/dd/text()')
l.add_xpath('location', '//div/div[1]/dl[1]/dd/a/text()')
l.add_xpath('district', '//div/div[1]/dl[2]/dd/p/a[1]/text()')
yield l.load_item()
データパージ
這い出した
items
のデータは乱れており、様々な
,\t
などの記号があるため、pipelines
で簡単な清掃作業を行い、
を用いて実現され、コードは以下の通りである.import re
def list2str(value):
new = ''.join(value).strip()
return new
class AnjukePipeline(object):
def process_item(self, item, spider):
area = item['area']
price = item['price']
loc = item['location']
district = item['district']
mode = item['mode']
age = item['age']
floor = item['floor']
modes = list2str(mode)
item['area'] = int(re.findall(r'\d+', list2str(area))[0])
item['age'] = int(re.findall(r'\d+', list2str(age))[0])
item['floor'] = list2str(floor)
item['location'] = list2str(loc)
item['district'] = list2str(district)
item['price'] = int(re.findall(r'\d+', list2str(price))[0])
item['mode'] = modes.replace('\t', '').replace('
', '')
return item
setting
にpipeline
パラメータを設定することを忘れないでください.ITEM_PIPELINES = {
'anjuke.pipelines.AnjukePipeline': 300,
}
コマンドライン実行
私たちは登ったデータを1つのファイルに出力したいです.
csv
またはjson
です.ここではcsv
のファイルを出力します.Scrapyでは
command
のコマンドが1つで完了し、プロジェクトファイルの下のコマンドラインに入力します.scrapy crawl anjuke -o items.csv
コマンドラインの
anjuke
は、最初に定義したname
です.爬取開始:
データ可視化分析
データを取得すると、
csv
のファイルが表示されます.次に、
jupyter notebook
を使用してデータ分析を行います.コードは次のとおりです.各区の
と
を簡単に分析してみると、データは部分的で、ブロガーはデータを全部登っていないので、参考にしてください.もちろん、実際の状況に基づいてより複雑なデータ分析と機械学習を行い、住宅価格の予測を行うこともできます.効果図は以下の通りです.
まとめ
本編は簡単な例にすぎず、完全な効率的な爬虫類には多くの改善が必要である.
ip
scrapd
の配置分布式爬虫類これらは後でゆっくり紹介して、終わります.
微信公衆番号Pythonデータ科学に注目し、
120G
人工知能学習資料を取得した.