正经网站爬虫实战,如何快速使用Selenium爬取租房信息

摘要

       爬虫有风险,谨慎防入狱。你我皆是遵纪守法的好公民,怎么会爬虫这种面向监狱编程的技巧呢?这次就发几个简单的请求抓两条数据吧。笔者以前曾经也专门做过爬虫的工作(人称爬哥),后来见各位同行入狱笔者见事不妙跑路了,首先爬虫只是一种工具,望诸君坚守本心,在允许的情况下抓抓数据还是莫得问题的,这次笔者将使用python大法,再配合自动化神器selenium来爬个正经网站。


1.技术选型

1.1 Selenium

       Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。1

       笔者本次爬取主要是使用Selenium的webDriver,这就是一个浏览器驱动,通过它来可以实现浏览器的一系列自动化操作,就是和我们浏览使用浏览器是一摸一样的,只是现在我们是通过代码来操作。

       If you want to create robust, browser-based regression automation suites and tests, scale and distribute scripts across many environments, then you want to use Selenium WebDriver, a collection of language specific bindings to drive a browser - the way it is meant to be driven。2

       使用webDriver来实现浏览器自动化操作。



1.2 MySql

       Mysq想必不用再多废话了,免费开源大法就是好,总所周知的关系型数据库,本次实战用来存储爬取的数据。



2 程序思路

       整个爬虫的数据抓取思路非常简单。

  1. 进入要抓取数据的网站页面。
  2. 开始抓取数据。
  3. 查看下一页数据,如果成功进入下一页则重复第2步。
  4. 第3步失败没有下一页数据则结束。
    爬虫抓取思路


3 程序实现(python selenium)

3.1 引入需要的包

       使用selenium的webdriver来控制浏览器,使用pymysql操作数据库用于保存数据,使用time来设置爬取速率,间隔时间设置。

from selenium import webdriver
import pymysql
import time

3.2 初始化驱动和数据库连接

       获取mysql连接

def get_conn():
    conn = pymysql.connect(host="localhost",
                           port=你的端口,
                           user="你的用户",
                           passwd="你的密码",
                           db="你的db",
                           charset='utf8')
    return conn

       初始化webdriver。

driver_path = r"你的驱动位置\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path)
# 获取一个连接
conn = get_conn()
cursor = conn.cursor()

       


3.3 建表

       建表前需要根据要获取的网站信息的结构进行建表,笔者根据租房网站的信息完成了下表构建。这个主要看网站上浏览到的数据的关系来,笔者要爬取的数据条目页面上如下,所以就选取了能看到的价格户型图片等主要信息作为建表属性。
在这里插入图片描述

CREATE TABLE `sz` (
  `image_url` varchar(255) DEFAULT NULL,
  `house_type` varchar(255) DEFAULT NULL,
  `apart_name` varchar(255) DEFAULT NULL,
  `price` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

3.4 具体数据爬取

  1. 进入爬取页面
def goto_url():
    url = "https://www.airbnb.cn/s/Shenzhen--China/homes?screen_size=medium&refinement_paths%5B%5D=%2Fhomes&place_id=ChIJkVLh0Aj0AzQRyYCStw1V7v0&click_referer=t%3ASEE_ALL%7Csid%3A342ab702-9117-480e-aee0-4983237764f0%7Cst%3AMAGAZINE_HOMES&title_type=MAGAZINE_HOMES&last_search_session_id=342ab702-9117-480e-aee0-4983237764f0"
    driver.get(url)
  1. 解析爬取信息
def get_detail_info():
    elements = driver.find_elements_by_class_name("_8ssblpx")
    print(elements)
    for element in elements:
        try:
            image_url = str(element.find_element_by_css_selector("._e296pg > div > div > div > a > div > img").get_attribute("src"))
            house_type = str(element.find_element_by_css_selector("._10ejfg4u > div > div > a > div._1dir9an > div:nth-child(1) > div > div > span > span").text)
            apart_name = str(element.find_element_by_css_selector("._10ejfg4u > div > div > a > div._1dir9an > div:nth-child(2) > div > div").text)
            price = str(element.find_element_by_css_selector("._10ejfg4u > div > div > a > div._1uomq46 > div._qg0ydb > div._1orel7j7 > div > span:nth-child(2)").text)
            print(sql % (image_url, house_type, apart_name, price))
            cursor.execute(sql % (image_url, house_type, apart_name, price))
        except Exception as e:
            print(e)

        conn.commit()
  1. 跳转到下一页
def goto_next():

    driver.find_element_by_css_selector("#site-content > div > div > div > div._1kss53yu > div > div > div > div._99vlue > div._jro6t0 > a._za9j7e").click()

    # driver.execute('document.querySelector("#site-content > div > div > div > div._1kss53yu > div > div > div > div._99vlue > div._jro6t0 > a._za9j7e").click()')
  1. 执行
goto_url()
while True:
    time.sleep(2)
    get_detail_info()
    time.sleep(2)
    goto_next()



4 爬取效果

       需要爬取的数据全部保存到数据库了,是不是so easy!
在这里插入图片描述


5 小结

       新年期间撸代码真是痛快,一直写代码一直爽,撸完代码写博客,这个程序还是很简单的,笔者写这个的时候一会儿就写完了,不过这也得益于笔者很久以前专门做过爬虫相关工作,对于Http,Tcp之类协议也比较熟悉,对于什么网络爬虫这不是洒洒水手到擒来,在做爬虫时应该掌握基本的html标签,http协议等相关知识,有了一定的基础后爬虫是很简单的,不过现在的反爬技术也越来越强了,还是得不断精进才能与时俱进呀!感谢诸君垂阅。


在这里插入图片描述


  1. 百度百科Selenium词条 ↩︎

  2. 百度百科Selenium 官网WebDriver介绍。 ↩︎

### 安居客租房(武汉为例)爬虫+数据分析+可视化 这个爬虫是我前段时间在淘宝上做单子的时候遇见的一个客户需求。本来以为就是一个简单的爬虫项目。但后面客户加了数据清洗和数据分析的要求。而后又加了要详细代码解释的需求等等。直到最后客户坦白说这是他们大专的毕设.......但是这个单子坐下来只有200左右,我想了一下,感觉好亏啊。在淘宝上随便找一个做毕设的都要好多钱的,而且客户本身的代码能力、数学、逻辑能力都很差,导致我每行都给注释以及看不懂,在我交付代码后又纠缠了我一个多礼拜。反正总体做下来的感觉就是烦躁。头一次感觉到了客户需求变更带来的巨大麻烦。 总之这是一次不是很愉快的爬虫经历。但是作为我写爬虫以来注释最详细的一次,以及第一次真正使用像matplotlib这种数据分析库的代码,我认为还是有必要分享出来给大家当个参考的(PS:大佬轻拍~)。爬虫本身几乎没有什么难度,写的也比较乱,敬请见谅。 **功能** 爬取安居客上的出租房信息(武汉地区的),并通过爬取数据进行数据清洗以及数据分析。给出四个不同层面的可视化图。最终结果如下图所示: ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/1.png) ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/2.png) ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/3.png) ![Image text](https://raw.githubusercontent.com/srx-2000/git_spider/master/anjuke_room_rent_info/result/4.png) **环境** 1. Windows 10 2. python3.7 **使用方法** 首先声明该爬虫由于是特定情况下写的,所以本身的通用性特别差,仅可以对安居客网站上的武汉的出租房信息进行爬取,且需要自己手动更新cookie。同时在对数据进行分析及可视化的时候由于也是特别针对武汉出租房的进行的,所以针对性也比较强。如果别的需求需要自己进行更改。 1. 访问[安居客网址](https://wuhan.anjuke.com/),获取cookie。 > tip:获取cookie的方法可根据[此链接](https://jingyan.baidu.com/article/5d368d1ea6c6e33f60c057ef.html) 2. 在项目中找到`spider.py`的文件,将第12行的cookie换成你自己的cookie。 3. 运行`spider.py`,获取房源信息。运行后应会产生一个`武汉出租房源情况.csv`的文件。此文件为我们从安居客爬取的房源信息,其中包含`房屋租住链接、房屋描述、房屋地址、房屋详情(户型)以及经纪人、房屋价格`五个属性。 4. 在获取了数据之后我们运行`matplotlib.py`文件。进行数据清洗,分析,可视化。运行后即可获得**功能**中展示四个图片。 **技术栈** 1. request 2. parsel 3. pandas 4. matplotlib **进步(相比之前)** 此次爬虫相比之前的技术上可以说有减无增。但其中注释相当详细,可谓是每行代码都有注释。所以对于初学者应该有一些用处。同时使用matplotlib进行了数据分析可视化等。对于数据处理的代码的注释也是几乎每行都有注释的。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兴趣使然的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值