国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

3.python開源——scrapy爬蟲獲取周邊新樓盤房源(CSDN)

2019-11-06 07:10:06
字體:
來源:轉載
供稿:網友

目標:

爬出房源的名字、價格、地址和url

需要爬取的數據

import scrapy

class TutorialItem(scrapy.Item):

    # define the fields for your item here like:

    # name = scrapy.Field()

    FANGJIA_ADDRESS = scrapy.Field()  # 住房地址

    FANGJIA_NAME = scrapy.Field()       # 名字

    FANGJIA_PRICE = scrapy.Field()      # 房價

    FANGJIA_URL = scrapy.Field()        # 房源url

目標城市

http://hz.lianjia.com/ 

或者新樓盤:

http://hz.fang.lianjia.com/loupan/nht1/ 

分析網頁源碼

先抓取url,再進入具體網頁抓取想要的數據。

href="http://hz.fang.lianjia.com/" ><span>新房</span>

XPATH抓取上面a  標簽中的href

抓取一個頁面的所有的url集合,遍歷上面的集合,請求具體頁面

fang_links = response.xpath('//div[@class="list-wrap"]/ul[@id="house-lst"]/li/div[@class="pic-panel"]/a/@href').extract()

代碼如下:(PS:類名字使用之前豆瓣,忽視之)

import scrapy

from tutorial.items import TutorialItem

from scrapy.selector import Selector

from scrapy.http import Request

headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36'}

class Douban(scrapy.Spider):  

    name = "fangjia"

    allowed_domins = ["http://hz.fang.lianjia.com/"]

    start_urls = []

    def start_requests(self):

        global headers

        urlhead = 'http://hz.fang.lianjia.com/loupan/'

        for i in range(18):

            url = urlhead+'pg%snht1' % i

            self.start_urls.append(url)

        for url in self.start_urls:

            print (url)

            yield scrapy.Request(url, headers=headers, callback=self.parse)

    def parse(self, response):

        global headers

        fang_links = response.xpath('//div[@class="list-wrap"]/ul[@id="house-lst"]/li/div[@class="pic-panel"]/a/@href').extract()

        if fang_links:

            for fang_link in fang_links:

                url = 'http://hz.fang.lianjia.com'+fang_link

                yield scrapy.Request(url, headers=headers, callback=self.parse_fangjia)

    def parse_fangjia(self, response):  

        item = TutorialItem()

        name = response.xpath('//div[@class="name-box"]/a/@title').extract()[0]

        url = response.xpath('//div[@class="name-box"]/a/@href').extract()[0]

        price = response.xpath('//p[@class="jiage"]/span[@class="junjia"]/text()').extract()[0]

        address = response.xpath('//p[@class="where"]/span/@title').extract()[0]

        item['FANGJIA_NAME'] = name

        item['FANGJIA_ADDRESS'] = address

        item['FANGJIA_PRICE'] = price

        item['FANGJIA_URL'] = 'http://hz.fang.lianjia.com'+url

        print (item['FANGJIA_NAME'])

        print (item['FANGJIA_ADDRESS'])

        print (item['FANGJIA_PRICE'])

        print (item['FANGJIA_URL'])

        yield item

爬蟲代碼說明:

allowed_domins 可選。包含了spider允許爬取的域名(domain)列表(list)。

name 定義spider名字的字符串(string)。

start_urls URL列表。當沒有制定特定的URL時,spider將從該列表中開始進行爬取。 因此,第一個被獲取到的頁面的URL將是該列表之一。

start_requests() 該方法必須返回一個可迭代對象(iterable)。該對象包含了spider用于爬取的第一個Request。當spider啟動爬取并且未制定URL時,該方法被調用。 當指定了URL時,make_requests_from_url() 將被調用來創建Request對象。 該方法僅僅會被Scrapy調用一次,因此您可以將其實現為生成器。

該方法的默認實現是使用 start_urls 的url生成Request。

如果您想要修改最初爬取某個網站的Request對象,您可以重寫(override)該方法。

本例中該函數主要是獲取start_urls列。然后每個url都調用parse函數。

for url in self.start_urls:

            print (url)

            yield scrapy.Request(url, headers=headers, callback=self.parse)

parse(response)

當response沒有指定回調函數時,該方法是Scrapy處理下載的response的默認方法。

parse 負責處理response并返回處理的數據以及(/或)跟進的URL。 Spider 對其他的Request的回調函數也有相同的要求。該方法及其他的Request回調函數必須返回一個包含 Request 及(或) Item 的可迭代的對象。

本例中,主要是處理每個URL,拼接URL,然后調用parse_fangjia函數。

parse_fangjia函數

該函數是真實爬取的主函數,從最后拼接的URL中獲取名字、地址、加個和URL,并輸出。

    總體過程小總,首先框架調用由start_requests函數,生成需要爬的初始URL,18個,

然后18次循環,每次循環中每個URL觸發parse函數,將所爬URL中的URL提取出來并拼接形成新的URL組。然后再次循環遍歷新的URL組中URL,調用parse_fangjia函數。

爬蟲

保存成CSV格式

#scrapy crawl ganglia -o ganglia.csv -t csv

Safari顯示網頁源碼:

新版的Safari在菜單欄里看不到“查看網頁源碼”的菜單了

點擊Safari菜單欄,選擇“偏好設置”

在彈出來的窗口中,選擇 “高級”頁簽,勾選 “在菜單欄里顯示開發菜單”

回到要查看源碼的頁面,點擊上方開發菜單


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 赞皇县| 岳池县| 高陵县| 遂昌县| 石渠县| 开远市| 开封县| 赤峰市| 措勤县| 抚松县| 黄梅县| 青河县| 新和县| 怀仁县| 团风县| 友谊县| 阿拉善左旗| 黄龙县| 揭阳市| 赣州市| 长武县| 武乡县| 黔江区| 安康市| 新巴尔虎右旗| 比如县| 平泉县| 蕲春县| 禹城市| 张家川| 关岭| 峨边| 弥渡县| 宜兰市| 万州区| 吉木萨尔县| 射洪县| 甘谷县| 泸溪县| 青田县| 武鸣县|