程式發布日期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的...