爬蟲(成都58同城所有房價,Python實現)


Python實現爬蟲(爬取58同城所有房價)

程序發布日期2018-9-25(如果以后不能使用了,就需要更改解析方式.)
github博客傳送門
csdn博客傳送門

爬蟲文件(Python實現)-爬取的數據文件(txt文件,空格分隔)-分析的文件(Python實現)-簡單的分析結果圖(png圖4張) 資源鏈接地址:https://download.csdn.net/download/zhanghao3389/10686953

本章所需知識:

分析頁面鏈接(pandas+numpy+matplotlib):https://blog.csdn.net/zhanghao3389/article/details/82845263

接下來上代碼:

import urllib.request  # 打開網頁,讀取網頁內容用
from lxml import etree  # 解析網頁用
import time  # 這里只使用了暫停程序的作用

url = 'https://cd.58.com/ershoufang/pn{}'  # 需要解析的網頁

# 定義了一個獲取網頁的方法 (http請求)
def getHtml(url):
    response = urllib.request.urlopen(url)  # 打開獲取的鏈接
    print(response.getcode())  # 返回一個網頁打開的狀態碼
    html = response.read()  # 將獲取的網頁寫入html
    return html  # 返回給調用者

# 定義了一個解析網頁的方法 (解析器)
def parserHtml(html):  # 將一個下載好的html傳入解析器
    html_text = etree.HTML(html)  # 將html轉換成xpath可以解析的格式
    message_list = html_text.xpath('/html/body/div[5]/div[5]/div[1]/ul/li')  # 解析到每個li元素的位置
    for message in message_list:  # 遍歷所有的li元素
        region = message.xpath('./div[2]/p[2]/span/a[2]/text()')  # 解析地理位置
        price = message.xpath('./div[3]/p[1]/b/text()')  # 解析房子的價格
        company = message.xpath('./div[3]/p[1]/text()')  # 解析房子的價格單位
        area = message.xpath('./div[2]/p[1]/span[2]/text()')  # 解析房子的面積
        unit_price = message.xpath('./div[3]/p[2]/text()')  # 解析房子的單價
        area = area[0].strip()  # 將房子的面積后的空格去掉(房子的面積參數后面有個 html的空格 跟我們寫入的格式不一樣所以必須去掉才能寫入到本地)
        b = '{0} {1} {2} {3}'  # 占位符(將每個數據中間添加一個空格隔開,便於后續導入excel)
        a = b.format(region[0], price[0] + company[0], area, unit_price[0])  # 將爬取的數據格式化
        print(a)  # 打印出格式化后的數據
        with open('message.txt', 'a') as f:  # 打開一個文件存入格式化后的文件
            f.write(str(a))  # 將數據寫入文件
            f.write('\n')  # 寫入一個換行符

# 主函數
for i in range(1, 70):  # 遍歷69次(看了一下網站 大概只有70頁 為了不增加程序難度 手動翻69次)
    print('第{}頁'.format(i))  # 打印正在爬取第幾頁
    url1 = url.format(i)  # 將url格式化 傳入頁數
    html = getHtml(url1)  # 下載html (將格式化好的url1傳入 getHtml 方法中)
    parserHtml(html)  # 解析html (將下載好的 html 傳入 parserHtml 方法中解析)
    time.sleep(1)  # 暫停一秒 (有時候有檢測會封 ip 然后將暫停時間調大一點 手動進入瀏覽器將驗證碼輸入一遍就可以重新爬取了.

分析頁面鏈接(pandas+numpy+matplotlib):https://blog.csdn.net/zhanghao3389/article/details/82845263

程序運行狀態圖:
1
2
3


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM