数据分析专栏

python爬虫:用selenium控制浏览器,爬取蛋壳公寓租房

2019-06-27  本文已影响13人  Viva_Stephen

上次我们讲了,如何爬取图片,大家可以点击链接查看。
"python爬虫:用request最简单的代码爬取图片,以及XpathHelper的使用"

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

同样这里分了四个步骤

1、提取网页信息
2、找到需要提取的内容
3、转化为从list转化成dataframe格式保持
4、翻页循环提取

首先,我们了解一下selenium是怎么操作的?(机器控制浏览器使用)
我么来看一下,它是怎样自动百度的~~

from selenium import webdriver
url="https://www.baidu.com"
driver=webdriver.Chrome()#打开浏览器
driver.get(url)

这样就可以得到


百度.png

接下来我们要输入文字,然后点击它搜索。


微信图片编辑_20190627101517.jpg

这就是我们要找到的信息,然后我们用这个代码输入:

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

操作指南.png

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

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

运行结果:


微信截图_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")

#先按一个盒子,放置所有LIST信息
d=[]
#将list转化为dataframe,然后进行保存
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参数是用来循环翻页的
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)#转化为Xpath格式
    name1=html.xpath("//div[@class='r_lbx_cen']/div[@class='r_lbx_cena']/a/text()")
    price1=html.xpath("//div[@class='r_lbx_money']/div[@class='r_lbx_moneya']/span[@class='ty_b']/text()")
    # print(name1)

#如果是一个文件,不需要再in 后面添加zip
    for name2,price2 in zip(name1,price1):
        a=price2.strip()#strip()的作用是去除左右空格
        b=name2.strip()
        c=[b,a]#组成一个一维列表
        d.append(c)#将数据添加到盒子D之中,形成二维列表
        print(d)
    ff(d)
#循环翻页
for i in range(1,5,1):
    start(i)
#结束后可以选择关闭浏览器
driver.close()

我在代码中添加了解释,大家可以仔细观察,然后自己上手练习一遍。

这里解释一下难点:

1、模拟浏览器打开操作,找到页面。
2、需要提取页面的全部代码,我的操作是:

html=driver.find_element_by_xpath('//*').get_attribute('outerHTML')#获取包含选中元素的HTML
html=etree.HTML(html)#转化为Xpath格式

3、然后用xpath提取代码,上篇文章有讲过xpathHlper的使用,这里不多讲~
4、保存方式
这里讲到了两种保存方式,一种是Dataframe的保存方式。
将提取的字符串,转为1维list,到二维list,再到dataframe的格式。

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

#在函数内,for循环解压中,a和b元素组成多个1维列表c,然后多个c添加到盒子d中形成二维列表。

c=[b,a]#组成一个一维列表
d.append(c)#将数据添加到盒子D之中,形成二维列表

#列表转化为dataframe,用to_csv保存
def ff(d):
    data_1 = pd.DataFrame(d)
    data_1.to_csv('E:/data7.csv')
ff(d)

第二种方式:直接多个列表保存到csv中,麻烦的多

c=[b,a]
csv_write.werterow(c) #在函数和for循环中运行
 out=open("E:/安居客3.csv","w",newline="",encoding="utf-8-sig")
 csv_write=csv.writer(out,dialect="excel")

希望这篇文章对你有所帮助,有什么疑问欢迎留言哦~

上一篇 下一篇

猜你喜欢

热点阅读