python爬蟲:用selenium控制瀏覽器,爬取蛋殼公寓租房信息,并保持為csv格式

上次我們講了,如何爬取圖片,大家可以點(diǎn)擊鏈接查看。
"python爬蟲:用request最簡(jiǎn)單的代碼爬取圖片,以及XpathHelper的使用"

今天我要分享的是用seleumns 提取蛋殼的租房信息。(文末附有代碼)

同樣這里分了四個(gè)步驟

1、提取網(wǎng)頁信息
2、找到需要提取的內(nèi)容
3、轉(zhuǎn)化為從list轉(zhuǎn)化成dataframe格式保持
4、翻頁循環(huán)提取

首先,我們了解一下selenium是怎么操作的?(機(jī)器控制瀏覽器使用)
我么來看一下,它是怎樣自動(dòng)百度的~~

from selenium import webdriver
url="https://www.baidu.com"
driver=webdriver.Chrome()#打開瀏覽器
driver.get(url)

這樣就可以得到


百度.png

接下來我們要輸入文字,然后點(diǎn)擊它搜索。


微信圖片編輯_20190627101517.jpg

這就是我們要找到的信息,然后我們用這個(gè)代碼輸入:

driver.find_element_by_xpath('//*[@id="kw"]').send_keys("劉亦菲")#輸入

操作指南.png

然后用同樣的方法找到"百度一下”:

driver.find_element_by_xpath('//*[@id="su"]').click()

運(yùn)行結(jié)果:


微信截圖_20190627102656.png

介紹完selenium的使用,我們正式提取蛋殼公寓的租房信息。

#需要用到的包
from selenium import webdriver
import time
from lxml import etree
import pandas as pd
from pandas import DataFrame
import csv

# out=open("E:/安居客3.csv","w",newline="",encoding="utf-8-sig")
# csv_write=csv.writer(out,dialect="excel")

#先按一個(gè)盒子,放置所有LIST信息
d=[]
#將list轉(zhuǎn)化為dataframe,然后進(jìn)行保存
def ff(d):
    data_1 = pd.DataFrame(d)
    data_1.to_csv('E:/data7.csv')

url="https://www.danke.com/room/sz?search=1&search_text=%E7%BF%BB%E8%BA%AB&from=home&page="
driver=webdriver.Chrome()

#i參數(shù)是用來循環(huán)翻頁的
def start(i):
    url_1=url+str(i)
    driver.get(url_1)
    time.sleep(2)
    html=driver.find_element_by_xpath('//*').get_attribute('outerHTML')#獲取包含選中元素的HTML
    html=etree.HTML(html)#轉(zhuǎn)化為Xpath格式
    name1=html.xpath("http://div[@class='r_lbx_cen']/div[@class='r_lbx_cena']/a/text()")
    price1=html.xpath("http://div[@class='r_lbx_money']/div[@class='r_lbx_moneya']/span[@class='ty_b']/text()")
    # print(name1)

#如果是一個(gè)文件,不需要再in 后面添加zip
    for name2,price2 in zip(name1,price1):
        a=price2.strip()#strip()的作用是去除左右空格
        b=name2.strip()
        c=[b,a]#組成一個(gè)一維列表
        d.append(c)#將數(shù)據(jù)添加到盒子D之中,形成二維列表
        print(d)
    ff(d)
#循環(huán)翻頁
for i in range(1,5,1):
    start(i)
#結(jié)束后可以選擇關(guān)閉瀏覽器
driver.close()

我在代碼中添加了解釋,大家可以仔細(xì)觀察,然后自己上手練習(xí)一遍。

這里解釋一下難點(diǎn):

1、模擬瀏覽器打開操作,找到頁面。
2、需要提取頁面的全部代碼,我的操作是:

html=driver.find_element_by_xpath('//*').get_attribute('outerHTML')#獲取包含選中元素的HTML
html=etree.HTML(html)#轉(zhuǎn)化為Xpath格式

3、然后用xpath提取代碼,上篇文章有講過xpathHlper的使用,這里不多講~
4、保存方式
這里講到了兩種保存方式,一種是Dataframe的保存方式。
將提取的字符串,轉(zhuǎn)為1維list,到二維list,再到dataframe的格式。

#盒子放在最外面
d=[]

#在函數(shù)內(nèi),for循環(huán)解壓中,a和b元素組成多個(gè)1維列表c,然后多個(gè)c添加到盒子d中形成二維列表。

c=[b,a]#組成一個(gè)一維列表
d.append(c)#將數(shù)據(jù)添加到盒子D之中,形成二維列表

#列表轉(zhuǎn)化為dataframe,用to_csv保存
def ff(d):
    data_1 = pd.DataFrame(d)
    data_1.to_csv('E:/data7.csv')
ff(d)

第二種方式:直接多個(gè)列表保存到csv中,麻煩的多

c=[b,a]
csv_write.werterow(c) #在函數(shù)和for循環(huán)中運(yùn)行
 out=open("E:/安居客3.csv","w",newline="",encoding="utf-8-sig")
 csv_write=csv.writer(out,dialect="excel")

希望這篇文章對(duì)你有所幫助,有什么疑問歡迎留言哦~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容