問題一
鏈家**也有反爬蟲策略和robots限制,robots限制忽略(不然沒法爬),另外頻繁爬取會直接導致被ban,需要隔天才會解禁止。防止被ban的方法有多種,1.禁止cookie 2.設定header 3.加大爬取間隔 4.使用**。我只用了前三種方法,具體可以在settings.py 和middlewares.py裡看到。因為沒有免費好用的**,所以在爬蟲實際使用中沒用方法4,但我在middlewares.py裡也留下了相關**,可稍做參考,但需要注意那幾個**ip是不可用的。
問題二我**裡只爬取了3000套二手房**,北京市實際在售的二手房大概有兩萬套,不是我不想全爬,只是鏈家只展示100頁(3000套)的內容,排序方式我也並不清楚。我嘗試通過分區域來爬取以獲得更多的資料,但爬蟲更容易被ban,大概爬幾頁後就被禁了,目前看來只能通過使用**的方式解決。
問題三我的爬取起始頁是一直爬取到100頁, 我在**裡注釋掉的 start_urls包含了北京市所有的區,如果不被ban,理論上是可以拿到北京市所有的二手房資訊的。爬取的資料有如下。
『region』: 小區
『url』: 房屋詳情頁鏈結
『houseinfo』: 房屋資訊 類似| 3室2廳 | 126.4平公尺 | 南 北 | 精裝 | 有電梯
『unitprice』: 每平公尺單價(元)
『totalprice』: 房屋總結(萬元)
『attention』: 被關注數
『visited』: 被經紀人帶看次數
『publishday』: 房屋發布多長時間
下面是爬蟲核心**,全部**可以上我github獲取。
# -*- coding: utf-8 -*-
import scrapy
import re
class ershoufangspider(scrapy.spider):
name = "ershoufang"
#下面是北京市所有區的起始url
# start_urls = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]
#實際爬取過程中我只用了預設的起始url,不容易被ban
start_urls = [""]
def parse(self, response):
houses = response.xpath(".//ul[@class='selllistcontent']/li")
for house in houses:
attention = ''
visited = ''
publishday = ''
try:
attention = house.xpath(".//div[@class='followinfo']/text()").re("\d+")[0]
visited = house.xpath(".//div[@class='followinfo']/text()").re("\d+")[1]
#因為發布日期中可能單位不是天,所以我做了簡單的轉化。
if u'月' in house.xpath(".//div[@class='followinfo']/text()").extract()[0].split('/')[2]:
number = house.xpath(".//div[@class='followinfo']/text()").re("\d+")[2]
publishday = '' + int(number)*30
elif u'年' in house.xpath(".//div[@class='followinfo']/text()").extract()[0].split('/')[2]:
number = house.xpath(".//div[@class='followinfo']/text()").re("\d+")[2]
publishday = '365'
else:
publishday = house.xpath(".//div[@class='followinfo']/text()").re("\d+")[2]
except:
print "these are some ecxeptions"
else:
pass
yield
page = response.xpath("//div[@class='page-box house-lst-page-box'][@page-data]").re("\d+")
p = re.compile(r'[^\d]+')
if len(page)>1 and page[0] != page[1]:
next_page = p.match(response.url).group()+str(int(page[1])+1)
next_page = response.urljoin(next_page)
yield scrapy.request(next_page, callback=self.parse)
說幾個我拿資料看出來的結果。1.通過publishday我發現平均房屋留存時間變長。2.房屋均價上個月7萬,這個月大概下降3-5k。 3.北京最便宜房屋單價1.6萬/平方公尺,最貴14.9萬/平方公尺(最貴和最便宜的一直都沒賣出去)。 說明房市稍有降溫。再次申明,這是從3000套房資料的統計結果,不是全量房屋統計結果,大家看看就好。
上個月爬取過幾天的資料,我決定以後每天定時爬一次,長期積累的資料肯定能分析出一些有趣的結論,我把所有爬取的資料放在方便大家獲取。同時別忘記訪問下我部落格
python爬蟲爬取鏈家二手房資訊
coding utf 8 import requests from fake useragent import useragent from bs4 import beautifulsoup import json import csv import time 構建請求頭 useragent use...
Python爬取鏈家二手房資訊
2 資料庫表結構 使用物件導向的方式,搭建專案框架 import requests from bs4 import beautifulsoup import pymysql class lianjiaspider mydb pymysql.connect localhost root 123456 ...
python爬蟲之鏈家鄭州二手房爬取
今天爬取鏈家鄭州二手房的資訊,先寫簡單一點的,通過鏈家的過濾標籤,共篩選出5家符合條件的 只爬取了列表頁的內容,後面在爬取稍微複雜一點的頁面。首先分析url及返回的html文字,發現所要的資訊就在當前url返回的html文字當中,這就非常簡單了。返回的html文字 既然這樣,那提取內容就十分的簡單了...