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

2022-08-24 13:06:12 字數 2025 閱讀 1490

程式發布日期2018-9-25(如果以後不能使用了,就需要更改解析方式.)

github部落格傳送門

csdn部落格傳送門

熟悉lxml中的etree模組

xpath的使用

檔案操作

函式時間模組

import urllib.request  # 開啟網頁,讀取網頁內容用

from lxml import etree # 解析網頁用

import time # 這裡只使用了暫停程式的作用

url = '' # 需要解析的網頁

# 定義了乙個獲取網頁的方法 (http請求)

def gethtml(url):

response = urllib.request.urlopen(url) # 開啟獲取的鏈結

print(response.getcode()) # 返回乙個網頁開啟的狀態碼

html = response.read() # 將獲取的網頁寫入html

return 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 = ' ' # 佔位符(將每個資料中間新增乙個空格隔開,便於後續匯入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格式化 傳入頁數

time.sleep(1) # 暫停一秒 (有時候有檢測會封 ip 然後將暫停時間調大一點 手動進入瀏覽器將驗證碼輸入一遍就可以重新爬取了.

程式執行狀態圖:

python 爬蟲 58同城

from bs4 import beautifulsoup import requests import csv import time url 已完成的頁數序號,初時為0 page 0 建立乙個有寫許可權的csv file csv file open rent.csv w 建立csv writer...

爬蟲 python 58同城 1

import datetime 時間 import sqlite3 資料庫模組 import requests 獲取html網頁的主要方法,對應於http的get for i in range 1,50 抓50頁,愛抓幾頁寫幾頁 print 當前抓取的頁面為 i url format i html ...

58同城演算法

58同城題目 58同城出了三道演算法題,第一道題題目過長。好像是和推薦系統掛鉤的題目 給cv一條活路吧!t t 第二道題還有第三道題都是leetcode上很簡單的題目 第一次2ac!主要還是題目簡單 主要想說一下第二道題目,給定乙個非負整數num,求在0 x num區間中的所有整數的二進位制數中1的...