美文网首页数据分析专栏
python爬虫:用selenium控制浏览器,爬取蛋壳公寓租房

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

作者: Viva_Stephen | 来源:发表于2019-06-27 11:03 被阅读13次

    上次我们讲了,如何爬取图片,大家可以点击链接查看。
    "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")
    

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

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/rbhlcctx.html