日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php爬取房源,(python) scrapy抓取房天下房源信息

發(fā)布時間:2024/3/24 php 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php爬取房源,(python) scrapy抓取房天下房源信息 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、前言

研究房價走勢和房源信息。

二、知識準備

1.python相關(guān)知識儲備

2.對Scrapy框架有基本的了解,知道其運行流程和邏輯

3.Xpath和CSS選擇器相關(guān)知識(本文只使用Xpath,要使用CSS選擇器的同學(xué)請自行學(xué)習(xí))

三、開始編碼

1.新建工程

安裝Scrapy過程就略過了,首先在通過命令 scrapy startproject shuofangwang新建工程,使用Pycharm打開可以看到其目錄結(jié)構(gòu)如下

這些文件分別是:

scrapy.cfg: 項目的配置文件

shuofangwan/: 該項目的python模塊。之后您將在此加入代碼。

shuofangwan/items.py: 項目中的item文件.

shuofangwan/pipelines.py: 項目中的pipelines文件.

shuofangwan/settings.py: 項目的設(shè)置文件.

shuofangwan/spiders/: 放置spider代碼的目錄.

2.定義Item

Item 是保存爬取到的數(shù)據(jù)的容器,class HouseItem定義你要保存的數(shù)據(jù)。import scrapy

import sys

reload(sys)

sys.setdefaultencoding('utf-8')

class HouseItem(scrapy.Item):

HouseName = scrapy.Field() #樓盤名

HousePrice = scrapy.Field() #價格

HouseAddress = scrapy.Field() #區(qū)域

HouseDetailAddress = scrapy.Field() #詳細地址

House_type = scrapy.Field() #戶型

HouseComment = scrapy.Field() #留言條數(shù)

3.編寫爬蟲Spider

創(chuàng)建一個Spider,必須繼承 scrapy.Spider 類, 且定義以下三個屬性name: 用于區(qū)別Spider。 該名字必須是唯一的,您不可以為不同的Spider設(shè)定相同的名字。

start_urls: 包含了Spider在啟動時進行爬取的url列表。 因此,第一個被獲取到的頁面將是其中之一。

后續(xù)的URL則從初始的URL獲取到的數(shù)據(jù)中提取。

parse() 是spider的一個方法。 被調(diào)用時,每個初始URL完成下載后生成的 Response

對象將會作為唯一的參數(shù)傳遞給該函數(shù)。 該方法負責解析返回的數(shù)據(jù)(response

data),提取數(shù)據(jù)(生成item)以及生成需要進一步處理的URL的 Request 對象。

如下代碼為我Spider主代碼模塊#!/usr/bin/env python

# coding:utf-8

import scrapy

import HouseItem

import sys

reload(sys)

sys.setdefaultencoding('utf-8')

class shuofangwnagSpider(scrapy.Spider):

name = "shuofangwang"

allowed_domains = ["newhouse.cs.fang.com"]

offset = 1

url = "http://newhouse.cs.fang.com/house/s/b9"

start_urls = [url + str(offset)+'/']

def parse(self, response):

clears = response.xpath("//div[@class='nlc_details']")

for each in clears:

item = HouseItem.HouseItem()

house_address = each.xpath(".//div[@class='address']")

item['HouseDetailAddress'] = house_address.xpath('.//a/@title').extract()

item['HouseAddress'] = house_address.xpath('.//a/span/text()').extract()

housetypelist = each.xpath(".//div[@class='house_type clearfix']")

item['House_type'] = housetypelist.xpath('string(.)').extract()

house_price = each.xpath(".//div[@class='nhouse_price']")

item['HousePrice'] = house_price.xpath('.//span/text()').extract()

houseeach = each.xpath(".//div[@class='nlcd_name']")

item['HouseName'] = houseeach.xpath('.//a/text()').extract()

item['HouseComment'] = each.xpath(".//span[@class='value_num']/text()").extract()

yield item

if self.offset < 31:

self.offset += 1

yield scrapy.Request(self.url + str(self.offset)+'/', callback = self.parse)

4.數(shù)據(jù)處理

編寫ITEM_PIPELINES處理數(shù)據(jù),Scrapy允許數(shù)據(jù)以JSON、JSON lines、CSV、XML四種格式保存,由于需要進行后續(xù)數(shù)據(jù)統(tǒng)計工作所以保存為CSV格式。在pipeline.py中寫入代碼:import json

import csv

import sys

reload(sys)

sys.setdefaultencoding('utf-8')

class ShuofangwangPipeline(object):

def __init__(self):

self.filename = open('items.csv', 'wb')

self.csvwriter = csv.writer(self.filename, delimiter=',')

self.csvwriter.writerow(['樓盤', '價格', '地址'])

def process_item(self, item, spider):

rows = zip(item['HouseName'], item['HousePrice'], item['HouseAddress'])

for row in rows:

self.csvwriter.writerow(row)

return item

def __init__(self):

self.filename = open('houseData.json', 'w')

def process_item(self, item, spider):

text = json.dumps(dict(item), ensure_ascii=False)+",\n"

self.filename.write(text.encode("utf-8").replace("\\t", "").replace("\\n",""))

print text

def close_spider(self,spider):

self.filename.close()

class Pipeline_ToCSV(object):

def __init__(self):

store_file = 'house.csv'

self.file = open(store_file, 'wb')

self.writer = csv.writer(self.file)

self.writer.writerow(("樓盤", "區(qū)域","價格","戶型","評論" , "地址"))

def process_item(self, item, spider):

housename = str(item['HouseName']).replace('u\'', '\'').replace("\\t", "").replace("\\n","").replace("[","").replace("]","")

houseprice = str(item['HousePrice']).replace('u\'', '\'').replace("\\t", "").replace("\\n","").replace("[","").replace("]","")

houseaddress = str(item['HouseAddress']).replace('u\'', '\'').replace("\\t", "").replace("\\n","").replace("[","").replace("]","")

housedetailaddress = str(item['HouseDetailAddress']).replace('u\'', '\'').replace("\\t", "").replace("\\n","").replace("[","").replace("]","")

housetype = str(item['House_type']).replace('u\'', '\'').replace("\\t", "").replace("\\n","").replace("[","").replace("]","")

housecomment = str(item['HouseComment']).replace('u\'', '\'').replace("\\t", "").replace("\\n","").replace("[","").replace("]","")

housename1 = housename.decode("unicode-escape")

houseprice1 = houseprice.decode("unicode-escape")

houseaddress1 = houseaddress.decode("unicode-escape")

housedetailaddress1 = housedetailaddress.decode("unicode-escape")

housetype1 = housetype.decode("unicode-escape")

housecomment1 = housecomment.decode("unicode-escape")

print '1----'+housename1

print '2----'+houseprice1

print '3----'+houseaddress1

print '4----'+housedetailaddress1

print '5----'+housetype1

print '6----'+housecomment1

self.writer.writerow((housename1,houseaddress1, houseprice1, housetype1, housecomment1, housedetailaddress1))

return item

def close_spider(self,spider):

self.file.close()

然后在settings.py中加入如下代碼:ITEM_PIPELINES = {

#'shuofangwang.pipelines.ShuofangwangPipeline': 1,

'shuofangwang.pipelines.Pipeline_ToCSV':2,

}

ShuofangwangPipeline和Pipeline_ToCSV對應(yīng)的是pipelines.py中的兩個類,第一個是存儲為json格式的用于測試使用所以在工程后期對期進行屏蔽處理,第二個是存儲CSV格式的。其名字后面的1和2代表著優(yōu)先級。

代碼中使用三個replace方法是因為取出的數(shù)據(jù)中含有"tn"等,其并不是我們想要的數(shù)據(jù)所以刪除。

并且要 特別注意 的是extract()取出的數(shù)據(jù)是unicode編碼后的數(shù)據(jù),所以后期的處理一定要注意,這里在最后使用.decode("unicode-escape")對數(shù)據(jù)進行轉(zhuǎn)碼。

抓取日志信息和處理后的數(shù)據(jù)如下:

四、總結(jié)

本文使用的知識點并不多,主要就是對scrapy框架的運行過程流程的了解,對數(shù)據(jù)處理時編碼的處理。對我來說由于第一次使用python編碼爬蟲應(yīng)用,最大的難點就是XPATH對數(shù)據(jù)的選取和數(shù)據(jù)存儲時編碼的處理。聽說python3可以忽略編碼的問題,后續(xù)可以進行嘗試。

總結(jié)

以上是生活随笔為你收集整理的php爬取房源,(python) scrapy抓取房天下房源信息的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国内精久久久久久久久久人 | 毛片久久久久 | 国产超级av| 乱色专区 | 国产精品第157页 | 国产欧美一区二区三区视频 | 蜜桃精品视频在线观看 | 苍井空张开腿实干12次 | 在线播放黄色av | 吞精囗交69激情欧美 | 免费的毛片 | 国产免费看片 | 97精品视频 | 日韩中文字幕免费 | 蜜桃视频成人在线观看 | 亚洲一区二区三区婷婷 | 香蕉视频在线视频 | 在线射 | 久综合网 | 尤物av无码色av无码 | 韩国av在线 | 亚洲av最新在线网址 | 欧美激情精品久久久久久免费 | 动漫同人高h啪啪爽文 | 国产二区自拍 | 99视频在线| 丰满大乳露双乳呻吟 | 中文字幕精品一区久久久久 | 日本aaa视频 | 精品人伦一区二区三区蜜桃免费 | 无码人中文字幕 | 97碰碰视频 | 国产成人亚洲综合 | 国产福利精品一区 | 中文字幕在线观看一区二区 | 免费观看日批视频 | 日本网站在线免费观看 | 黄色精品网站 | 日本精品免费一区二区三区 | 高潮毛片7777777毛片 | 色一情一乱一乱一区91av | 国产午夜电影 | 在线观看视频福利 | 性开放网站 | 色狠狠综合网 | 婷婷久久网 | 香蕉成视频人app下载安装 | 青草视频在线观看免费 | 91极品视觉盛宴 | 日韩精品在线观看视频 | 献给魔王伊伏洛基亚吧动漫在线观看 | 韩国中文三级hd字幕 | 综合天堂av久久久久久久 | 天天色天天干天天 | 天天综合精品 | 久久婷婷一区二区 | 欧美经典一区二区三区 | 久久免费影院 | 草草草在线观看 | 亚洲黄色在线播放 | 加勒比一区二区三区 | 久久精品5| 欧美性猛交ⅹxxx乱大交3 | 国产午夜无码视频在线观看 | 欧美一区二区三区啪啪 | 狠狠干2022 | a级黄色小说 | 欧美色啪 | 91在线视频播放 | 91丨九色丨蝌蚪丨丝袜 | 免费污污视频在线观看 | 亚洲一区二区高清视频 | 国产欧美三级 | 国产高清成人久久 | 国产老妇伦国产熟女老妇视频 | 日韩激情精品 | 琪琪女色窝窝777777 | 日韩在线视频免费 | 秋霞午夜鲁丝一区二区 | 日本黄色一区二区 | av网站地址 | 顶级尤物极品女神福利视频 | 日韩一级生活片 | 久久综合狠狠综合久久综合88 | 国产精品99久久久久久久女警 | 欧美成人综合网站 | 欧美大片aaa | 交专区videossex | 18黄暴禁片在线观看 | 欧美少妇15p | 国产视频一区二区三区在线观看 | 中文字幕一区二区三区5566 | 天天干天天做天天操 | 日韩中文字幕 | 欧美精品一区二区三区四区 | 国产奶水涨喷在线播放 | 动漫av网 | 纯爱无遮挡h肉动漫在线播放 | 伊人网狼人 |