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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

python爬虫实战,爬取洛杉矶上千房源!

發布時間:2024/3/24 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python爬虫实战,爬取洛杉矶上千房源! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言 最近打算簽證流程結束后,開始看看加州的房子了,畢竟研究生是不太容易住校內的,具體來說還是看看洛杉磯的房源。因為網站在國外,訪問比較慢,不同頁的也不好比較,于是想著把它全部爬取下來整理成docx文檔,便于搜索和直接篩選,比如價格太高的直接刪掉,剩下的就是滿足需求的房源了。 本文簡單分析下代碼后將所有源碼和文件公開,大家各取所需~?

python庫

PackageVersion
python-docx0.8.11
requests2.21.0
lxml4.6.2
bs40.0.1

其中:

  • python-docx庫用于操作docx文件,將爬取的信息保存下來
  • requests發送網絡請求
  • lxml中的etree用于通過Xpath查找想要的頁面元素
  • bs4用于定位網頁源碼中的元素并統一篩選

房源平臺

本代碼中爬取的對象是?www.apartments.com?和?https://tripalink.com/,想必留學生們都對這兩個網站非常熟悉。經測試,兩個網站均無任何反爬機制,畢竟是公開的第三方平臺,房源入駐打廣告,也沒有什么私有資料,既然給爬那隨便爬。。。

開始

1.導入庫

首先我們導入python庫

?

?

#coding=utf-8 import os import re import docx import urllib import requestsfrom datetime import * from lxml import etree from bs4 import BeautifulSoupfrom docx import Document from docx.shared import Inches, Cm from docx.enum.text import WD_PARAGRAPH_ALIGNMENT from docx.enum.table import WD_TABLE_ALIGNMENT from docx.enum.dml import MSO_THEME_COLOR_INDEX

?

結尾版式

先引入一個docx文件里的末尾版式添加函數,不理解的可以先不看,后面會用到:

?

?

def endnote(document):p = document.add_paragraph('歡迎點贊收藏關注~')p.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTERp = document.add_paragraph('https://blog.csdn.net/weixin_42815846')p.paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTERdocument.add_picture('比心.png', width=Inches(1))document.paragraphs[-1].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER

?

2.請求函數

再進入一個頁面獲取函數,此函數的輸入為頁面的url鏈接,返回頁面內容,其中headers可以根據自己瀏覽器的具體信息來修改,當然也可以不改,作用就是偽裝自己,讓網站以為你是瀏覽器訪問,而不是python源碼在請求數據。

?

?

def getHtml(url): # 借助user-agentheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.100 Safari/537.36'}# 借助requests獲取響應對象response = requests.get(url=url, headers=headers)# 從響應對象中獲取響應內容# 設置編碼格式response.encoding = "utf-8"return response.text

?

3.Xpath提取信息 既然已經把頁面請求到手,那可以通過Xpath進行搜索我們想要的信息了,代碼如下。不懂Xpath可以先搜一搜Xpath的用法,再返回來看此代碼。此代碼爬取了 www.apartments.com 上加州洛杉磯的房源信息,第一個循環中的page范圍為1-28,因為在作者爬取時該地方的房源有28頁,因此循環進行爬取。

?

?

for page in range(1, 29):print(f"第{page}頁")html = getHtml(f'https://www.apartments.com/los-angeles-ca/{page}/') bs4 = BeautifulSoup(html, 'html.parser')# 根據屬性結構獲取內容content = bs4.find_all(name="li", attrs={"class": "mortar-wrapper"})selecter=etree.HTML(html)for index in range(1, len(content)+1):title = selecter.xpath(f'//*[@id="placardContainer"]/ul/li[{index}]/article/header/div[1]/a/div[1]/span')[0].xpath('string(.)')addr = selecter.xpath(f'//*[@id="placardContainer"]/ul/li[{index}]/article/header/div[1]/a/div[2]')[0].xpath('string(.)')# 房屋鏈接roomlink = selecter.xpath(f'//*[@id="placardContainer"]/ul/li[{index}]/article')[0].xpath('@data-url')[0]rooms.append([title, addr, roomlink])prefix = selecter.xpath(f'//*[@id="placardContainer"]/ul/li[{index}]/article/section/div')[0]# 圖片鏈接picsrc = prefix.xpath('./div[1]/div[2]/div[2]/ul/li[1]/a')picsrc = picsrc[0].xpath('@href')[0] if len(picsrc)>0 else "無"# Virtual TourVRtour = prefix.xpath('./div[1]/div[2]/div[2]/ul/li[2]/a')VRtour = VRtour[0].xpath('@href')[0] if len(VRtour)>0 else "無"# 免租freeRent = prefix.xpath('./div[2]/div/div[1]/div')freeRent = freeRent[0].xpath('@data-specials-label')[0] if len(freeRent)>0 else "否"# 價格price = prefix.xpath('./div[2]/div/div[2]/div')[0].xpath('string(.)')# 類型roomtype = prefix.xpath('./div[2]/div/div[3]/div[1]')[0].xpath('string(.)')# 是否可用available = prefix.xpath('./div[2]/div/div[3]/div[2]')[0].xpath('string(.)')# 便利設施amenities = []for i, per1 in enumerate(prefix.xpath('./div[2]/div/div[4]/span')):amenities.append(per1.xpath('string(.)'))# 電話telephone = prefix.xpath('./div[2]/div/div[5]/a/span')telephone = telephone[0].xpath('string(.)') if len(telephone)>0 else "無"rooms[-1].extend([picsrc, VRtour, freeRent, price, roomtype, available, amenities, telephone])

?

可見,在代碼中爬取了房源的很多信息:房屋名、房屋鏈接、內部圖片鏈接、VR看房、免租信息、價格、住房類型、可用性、便利設施以及聯系電話等。其中圖片鏈接還可以進一步將圖片爬取下來,但是為了docx文檔的組織便利性,僅將鏈接保存下來?(畢竟它給你看的多半不是實際的樣子。。

4.存入docx

最后利用如下函數將所有信息存入docx,用到了Document類。其中add_heading表示加標題,第二個參數中的0表示0號標題,1表示1號標題;add_paragraph表示加一個段落;用到了add_table添加表格,以及居中、合并、設置列寬等操作。

?

?

def apartments2docx(data):document = Document()header = 'LA lease from www.apartments.com {}'.format(datetime.now().strftime('%a, %b %d %H:%M'))document.add_heading(header, 0)names = ['房屋類型', 'Availability', '價格', '是否免租', '便利設施', '室內概覽', 'VR看房', '房屋鏈接', '聯系方式']orders = [7, 8, 6, 5, 9, 3, 4, 2, 10]for i, room in enumerate(data):document.add_heading(f"{i+1}. "+room[0], 1)document.add_paragraph(room[1])table = document.add_table(rows=10, cols=2, style='Table Grid')for index, column in enumerate(table.columns):for cell in column.cells:cell.width = Inches(1) if index == 0 else Inches(5)table.cell(0,0).merge(table.cell(0,1))for row, obj_row in enumerate(table.rows):if row == 0:obj_row.cells[0].text = "租賃信息"else:x = orders[row-1]obj_row.cells[1].text = room[x] if x != 9 else '、'.join(room[x])obj_row.cells[0].text = names[row-1]table.cell(0,0).paragraphs[0].paragraph_format.alignment = WD_TABLE_ALIGNMENT.CENTERdocument.add_paragraph('')endnote(document)document.save('ApartmentsRooms.docx')

?

如有報錯Failed to establish a new connection: [WinError 10060] 由于連接方在一段時間后沒有正確答復或連接的主機沒有反應,連接嘗試失敗。')),換一個headers可以解決,可能網站還是有對一個客戶端請求的回應上限 效果展示。

小結(附源碼)

本代碼中對tripalink的爬取不再贅述,唯一不同的是沒用Xpath,而是直接對BeautifulSoup對象進行操作。

近期有很多朋友通過私信咨詢有關Python學習問題。為便于交流,點擊藍色自己加入討論解答資源基地

?

總結

以上是生活随笔為你收集整理的python爬虫实战,爬取洛杉矶上千房源!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。