文章目录

  • 1 资料
  • 2 笔记
    • 2-1 准备
      • 2-1-1. 网址
      • 2-2-2 文本位置
    • 2-2 代码
      • 2-2-1 原型
      • 2-2-2 ver0.1

1 资料

  • 《Python网络爬虫从入门到实践》唐松,陈志铨。主要面向windows平台下的python3。

2 笔记

2-1 准备

本章实践项目的目的是获取Airbnb深圳前20页的短租房源。作为Airbnb的超赞房东,笔者特别喜欢Airbnb的理念,同时需要监控和了解竞争对手的房屋名称和价格,这样才能让自己的房子有竞争力。
本项目需要获取前20页短租房源的名称、价格、评价数量、房屋类型、床数量和房客数量。网页地址为:https://zh.airbnb.com/s/Shenzhen–China?page=1

2-1-1. 网址

之前的网址内容改变了,实际爬取的网址第一页为https://www.airbnb.cn/s/Shenzhen–China/homes?query=Shenzhen,%20China&screen_size=large&refinement_paths%5B%5D=/homes&click_referer=t:SEE_ALL%7Csid:0c7b844d-c81d-4fea-ab73-579bccc8c068%7Cst:MAGAZINE_HOMES&title_type=MAGAZINE_HOMES&last_search_session_id=0c7b844d-c81d-4fea-ab73-579bccc8c068

第二页为https://www.airbnb.cn/s/Shenzhen–China/homes?refinement_paths%5B%5D=%2Fhomes&current_tab_id=home_tab&selected_tab_id=home_tab&screen_size=large&click_referer=t%3ASEE_ALL%7Csid%3A0c7b844d-c81d-4fea-ab73-579bccc8c068%7Cst%3AMAGAZINE_HOMES&title_type=MAGAZINE_HOMES&hide_dates_and_guests_filters=false&place_id=ChIJkVLh0Aj0AzQRyYCStw1V7v0&s_tag=PG0WiDLi&section_offset=4&items_offset=18&last_search_session_id=70170a63-acec-4467-9e22-ad3fdd0271a5
第三页为https://www.airbnb.cn/s/Shenzhen–China/homes?refinement_paths%5B%5D=%2Fhomes&current_tab_id=home_tab&selected_tab_id=home_tab&screen_size=large&click_referer=t%3ASEE_ALL%7Csid%3A0c7b844d-c81d-4fea-ab73-579bccc8c068%7Cst%3AMAGAZINE_HOMES&title_type=MAGAZINE_HOMES&hide_dates_and_guests_filters=false&s_tag=PG0WiDLi&section_offset=4&items_offset=36&place_id=ChIJkVLh0Aj0AzQRyYCStw1V7v0&last_search_session_id=36cce69d-bb21-4e65-93b7-4a6e3f3f7fb4
实验证明,以上一长串内容只要取第一页以后任意一页修改items_offset的值为(n-1)*18就可以跳转到第n页。后面的last_search_session_id虽然一直在变,但可以用同一个数值访问所有页面。
另外,后面一长串&相连的内容可以随机调换顺序,却不影响访问。

2-2-2 文本位置

通过方法1(通过浏览器审查元素解析真实网页地址)需要的似乎是这些网址

<script defer="" crossorigin="anonymous" src="https://z1.muscache.cn/airbnb/static/packages/AsyncChinaSignupModal~AsyncSignupModal~AsyncSimpleSignupModal~ChinaReservationCenterDetailPageContai~96144fd8-94878cf1.js" type="application/javascript"></script>
<script defer="" crossorigin="anonymous" src="https://z1.muscache.cn/airbnb/static/packages/AsyncLoginModal~AsyncSignupModal~ChinaReservationCenterDetailPageContainer~EmbedModal~MarketplacePDP~cb57683b-caa2c37d.js" type="application/javascript"></script>
<script defer="" crossorigin="anonymous" src="https://z1.muscache.cn/airbnb/static/packages/ChinaReservationCenterDetailPageContainer~HomesCheckoutFlowApp_WhosComingContainer_async~HomesChecko~237e18f8-a2aae0a3.js" type="application/javascript"></script>
<script defer="" crossorigin="anonymous" src="https://z1.muscache.cn/airbnb/static/packages/ChinaBrowsingHistoryPage~ChinaReservationCenterDetailPageContainer~ChinaReservationCenterListPageCon~86d14141-cfea1498.js" type="application/javascript"></script>
<script defer="" crossorigin="anonymous" src="https://z1.muscache.cn/airbnb/static/packages/MarketplacePDP-SimilarListings~PageSlot-ExploreController~SelectPDP-SelectSimilarListings~TopUserLis~a8c8c3d1-8423fd03.js" type="application/javascript"></script>
<script defer="" crossorigin="anonymous" src="https://z1.muscache.cn/airbnb/static/packages/MarketplacePDP-SimilarListings~PageSlot-ExploreController~TopUserListingsControllerAsync~webcot-chin~7b112600-947ad801.js" type="application/javascript"></script>
<script defer="" crossorigin="anonymous" src="https://z1.muscache.cn/airbnb/static/packages/PageSlot-ExploreController~TopUserListingsControllerAsync~explore-original-content-section_listings~~8b5ba336-11b7608f.js" type="application/javascript"></script>
<script defer="" crossorigin="anonymous" src="https://z1.muscache.cn/airbnb/static/packages/PageSlot-ExploreController~TopUserListingsControllerAsync~webcot-ChinaHomesPDPContainer~webcot-china~4354cb10-36ed9b05.js" type="application/javascript"></script>
<script defer="" crossorigin="anonymous" src="https://z1.muscache.cn/airbnb/static/packages/PageSlot-ExploreController~webcot-china-CrossVerticalSearchContainer_async~webcot-china-ExperiencesS~f8a9d6cf-4044105b.js" type="application/javascript"></script>
<script defer="" crossorigin="anonymous" src="https://z1.muscache.cn/airbnb/static/packages/webcot-china-CrossVerticalSearchContainer_async~webcot-china-ExperiencesSearchContainer_async~webcot~be630438-197365b6.js" type="application/javascript"></script>
<script defer="" crossorigin="anonymous" src="https://z1.muscache.cn/airbnb/static/packages/PageSlot-ExploreController~explore-original-content-section_listings~explore-original-content-sectio~3edab506-9a7c8870.js" type="application/javascript"></script>
<script defer="" crossorigin="anonymous" src="https://z1.muscache.cn/airbnb/static/packages/PageSlot-ExploreController~explore-original-content-section_contextual_searches~webcot-china-CrossVe~3f3378bc-38c4058c.js" type="application/javascript"></script>
<script defer="" crossorigin="anonymous" src="https://z1.muscache.cn/airbnb/static/packages/webcot-china-CrossVerticalSearchContainer_async~webcot-china-ExperiencesSearchContainer_async~webcot~ec3d75cf-5ea871f5.js" type="application/javascript"></script>
<script defer="" crossorigin="anonymous" src="https://z1.muscache.cn/airbnb/static/packages/PageSlot-ExploreController~explore-original-content-section_inserts~webcot-china-CrossVerticalSearch~0894e9b1-37e0947a.js" type="application/javascript"></script>
<script defer="" crossorigin="anonymous" src="https://z1.muscache.cn/airbnb/static/packages/explore-original-content-section_list_headers~webcot-china-CrossVerticalSearchContainer_async~webcot~03e01e4e-811aaa9a.js" type="application/javascript"></script>
<script defer="" crossorigin="anonymous" src="https://z1.muscache.cn/airbnb/static/packages/webcot-china-HomesSearchContainer_async-1046c577.js" type="application/javascript"></script>

这些网址没什么规律的,也找不到一个总的,如果用静态的requests会死人的。所以还是乖乖用Selenium库把。
至于要查找的信息,它们位置如下:
div._fhph4u 17项内容位置
div._qlq27g 每一项文本位置
div._1etkxf1 span.fk7kh10 innerText:独立房间 · 1室2卫1床
div._1revvmz div._qhtkbey innerText:深圳北站 大床房 直达香港口岸/出差首选 1.8米超大床房 温馨舒适北欧风公寓
div._13o4q7nw span._1clmxfj innerText: “4.9分 · 252条评论”
div._1ixtnfc innerText: “价格↵¥168”

2-2 代码

2-2-1 原型
from selenium import webdriver
from selenium.webdriver.chrome.webdriver import WebDriver
# 要调用的浏览器driver地址,根据浏览器不同实现方式会有所差别
# chrom.webdriver里对应的参数需要的是一个字符串,如果不给数据它会去找$PATH
executable_path = 'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe'
# 产生对象
driver = WebDriver(executable_path=executable_path)
link = "https://www.airbnb.cn/s/Shenzhen--China/homes?refinement_paths%5B%5D=%2Fhomes&" \"current_tab_id=home_tab&selected_tab_id=home_tab&screen_size=large&click_refer" \"er=t%3ASEE_ALL%7Csid%3A0c7b844d-c81d-4fea-ab73-579bccc8c068%7Cst%3AMAGAZINE_HO" \"MES&title_type=MAGAZINE_HOMES&hide_dates_and_guests_filters=false&s_tag=PG0WiD" \"Li&section_offset=4&place_id=ChIJkVLh0Aj0AzQRyYCStw1V7v0&last_search_session_i" \"d=36cce69d-bb21-4e65-93b7-4a6e3f3f7fb4&items_offset="
for i in range(10):  # 这里只打算查询前10页driver.get(link + "{}".format(i * 18))  # 第i页的items_offset=i * 18all_item = driver.find_element_by_css_selector("div._fhph4u")items = all_item.find_elements_by_css_selector("div._qlq27g")  # 使用find_elements_by……()获得包含17项的一个列表for j in range(len(items)):name = items[j].find_element_by_css_selector("div._qhtkbey")print(name.text)driver.close()

结果

LADYMA |原宿 摩洛哥风格 福田CBD会展中心#家庭影院CocoPark福田皇岗口岸岗厦地铁口
【十二微邸】14J-KKmall楼上的城市微魔方
【宫遇】17-KKmall楼上一房一厅--【Loft时代】
[Misa’s house] ‘想‘老街地铁口/kkmall万象城罗湖口岸/ins风商务房/直达香港
深圳北站 大床房 直达香港口岸/出差首选 1.8米超大床房 温馨舒适北欧风公寓
【双子座】近罗湖口岸|kkmall|东门老街|ins风|波波池|巨幕投影仪
美食街|loft|罗湖口岸|双地铁|巨幕影院 | 游泳池1-3人公寓
水贝珠宝园7号线地铁出口高端居家公寓
(初见)罗湖阅见·生活美学公寓城景大床房近地王大厦万象城大剧院D出口
【十二微邸】28H-KKmall楼上的心所微山水
覔舍·A#紧邻南科大校区#地铁5号线塘朗站#大落地窗#米家智能家居#100寸投影#赠送早餐#免费撸猫
燈塔·時光 Clean warm and cozy place
【深圳北站|幸会·书院】近地铁4号直达会展中心/福田口岸-城市空中花园-独立房间
(只能住①人喔)「星星的杂货铺」西丽•366大街【有猫】独立房间
幻想-深圳南山高新园地铁站 近深大/世界之窗/万象天地/海岸城/华侨城超棒新房
「木夕」地铁口/九方购物中心楼上/深圳北站 /直达福田口岸 全新日式风公寓
暖空调 溜达家 带浴缸的明亮房子 白色空间 美式风格紧邻3号线地铁口 龙岗中心城 万科广场 单房整租
猫筑AirCat#高新园万象天地北欧风智能公寓配大投影及开放式厨房
【谧境】KKMALL楼上|万象城|老街美食中心|罗湖口岸|直达香港-北欧文艺小清新 落地窗城市谧境
K's 【Room2】福田CBD【三地铁口】【可健身】【柯基狗狗陪伴】【家庭影院】
[蜜桃家]ins少女心.深圳北站/ 九方购物中心/直达香港/地铁旁
精致单人间【粉粉少女心+网红打卡】-会展中心CBD皇岗口岸福田口岸购物公园福田高铁站
【水泥盒子1】の【惊蛰】(独立卫浴间)(1只蓝猫)(有共享空间)
男生舱·深圳星语太空舱酒店(会展中心岗厦店,近地铁站,近香港,适合团队入住,岗厦地铁A出口)0号店
近海岸城深圳大学科技园11号线南山地铁站直达机场/温馨舒适清新公寓整租
【NiteNite奈奈】地铁口 水贝珠宝东门独立阳光创意公寓 1min Sta.stylish ap
【法式小屋】 近科技园、深大,地铁口直达机场&高铁站|超赞房东
【晨曦Dawn · 三兮】日式榻榻米、巨幕投影套房,福田中心区 会展中心皇岗福田双口岸,紧邻地铁口
日式公寓,福田CBD中心,靠近会展中心
糖果-10分钟深圳北站/20分钟会展中心/25分钟去福田港口,过港方便,30分钟去深圳火车站
【商务投影系列】,全高清投影,整套公寓,地铁直达莲花山,福田口岸香港,会展中心。只为更懂生活的你。
warm apartment in LuoWu罗湖口岸火车站五分钟
AI购物公园旁石厦地铁口的落地窗景观房
复式:福田市中心打卡精装香蜜小筑(双地铁)ShenZhen FuTian
促销优惠~罗湖口岸旁有点不错的日式风格复式公寓
「神田」罗湖口岸/老街/日式榻榻米一居/加床可住4人/落地窗观老街
明式新中式风格现代公寓
深圳北站/九方购物中心/地铁直达福田口岸~全新豪华公寓ins
#椿#地铁口步行5分钟/近世界之窗/深大/春茧体育馆/科技园/高新园站/大幕布投影
大梅沙180度绝色海景智能门锁海风清爽精品民宿免费停车
深圳福田CBD與香港24小时通关口岸的双地铁五星商務酒店公寓
「木夕」深圳北站/九方购物中心/地铁口/地铁直达福田口岸/简约黑白灰北欧公寓
碧海潮生阁 明亮清新一线海景四人双床房
[mikiko’s house]ins Korean style舒适卧室/地铁旁/近深圳北站直达HK
TO SLEEP·图眠 白色简约风新房上线:超大高空落地窗/东门老街地铁口/罗湖口岸/京基地王万象城
【B10ivy】巨幕影院 有猫 VPN外网直连 Live推荐 华侨城香蜜湖 近科技园福田深圳湾
KKmall-13-京基100楼上一房一厅-临近万象城/地王/荔枝公园
【城遇】樱空 日式loft公寓 近罗湖口岸国贸金光华万象城东门 双地铁口 好住好逛又好吃
科技园/地铁口/近万象天地/深大/100寸巨屏投影/日式现代/影室
[蜜桃家] 无印良品日式风/深圳北站/九方购物中心/地铁旁/直达香港
2-2-2 ver0.1
import time
from selenium import webdriver
from selenium.webdriver.chrome.webdriver import WebDriver
# 要调用的浏览器driver地址,根据浏览器不同实现方式会有所差别
# chrom.webdriver里对应的参数需要的是一个字符串,如果不给数据它会去找$PATH
executable_path = 'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe'
# 产生对象
driver = WebDriver(executable_path=executable_path)
link = "https://www.airbnb.cn/s/Shenzhen--China/homes?refinement_paths%5B%5D=%2Fhomes&" \"current_tab_id=home_tab&selected_tab_id=home_tab&screen_size=large&click_refer" \"er=t%3ASEE_ALL%7Csid%3A0c7b844d-c81d-4fea-ab73-579bccc8c068%7Cst%3AMAGAZINE_HO" \"MES&title_type=MAGAZINE_HOMES&hide_dates_and_guests_filters=false&s_tag=PG0WiD" \"Li&section_offset=4&place_id=ChIJkVLh0Aj0AzQRyYCStw1V7v0&last_search_session_i" \"d=36cce69d-bb21-4e65-93b7-4a6e3f3f7fb4&items_offset="
for i in range(10):  # 这里只打算查询前10页driver.get(link + "{}".format(i * 18))  # 第i页的items_offset=i * 18all_item = driver.find_element_by_css_selector("div._fhph4u")items = all_item.find_elements_by_css_selector("div._qlq27g")  # 使用find_elements_by……()获得包含17项的一个列表for j in range(len(items)):try:house_infor = dict()house_infor["name"] = items[j].find_element_by_css_selector("div._qhtkbey").texthouse_infor["type"] = items[j].find_element_by_css_selector("div._1etkxf1").texthouse_infor["evaluate"] = items[j].find_element_by_css_selector("div._13o4q7nw").texthouse_infor["price"] = items[j].find_element_by_css_selector("div._1ixtnfc").textprint(str(house_infor))except Exception as e:print("这个元素已失效")time.sleep(5)
driver.quit()

其中try……expect是为了这两个因为网页动态刷新出现的错误准备的:

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"div._1etkxf1"}(Session info: chrome=77.0.3865.90)Message: stale element reference: element is not attached to the page document(Session info: chrome=77.0.3865.90)```(但它也导致一页只要有一个出错,后面的全部不处理)另一方面,实际运行时,结果因为网页跳转太快而无法显示完全,能有多少内容完全看脸(网速)。(time.sleep就是尝试用来对付它的,但失败了)比对书中代码,方法上没有什么不同的地方,看来这个问题只能以后再说了(因为百度了半天啥也没找到)。

python网络爬虫学习笔记(7)动态网页抓取(二)实践相关推荐

  1. python网络爬虫学习笔记(6)动态网页抓取(一)知识

    文章目录 网络爬虫学习笔记(2) 1 资料 2 笔记 2-1 动态抓取概述 2-2 通过浏览器审查元素解析真实网页地址 2-3 网页URL地址的规律 2-4 json库 2-5 通过Selenium模 ...

  2. Python网络爬虫学习笔记(二)基本库的使用

    基本库的使用 最基础的 HTTP 库有 urllib . httplib2 . requests . treq 等 . 使用urlib urlib 包含四个模块 口 request : 它是最基本的 ...

  3. python网络爬虫网易云音乐_一篇文章带你用Python网络爬虫实现网易云音乐歌词抓取...

    标签下,如下图所示: 接下来我们利用美丽的汤来获取目标信息,直接上代码,如下图: 此处要注意获取ID的时候需要对link进行切片处理,得到的数字便是歌曲的ID:另外,歌曲名是通过get_text()方 ...

  4. python 网络爬虫学习笔记(一)

    为了方便,在Windows下我用了PyCharm,个人感觉这是一款优秀的python学习软件.爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去 ...

  5. python网络爬虫学习笔记(二):爬虫基本概述

    1.爬虫的基本概述 (1) 获取网页 爬虫首先要做的工作就是获取网页,这里就是获取网页的源代码.源代码里包含了网页的部分有用信息,所以只要把源代码获取下来,就可以从中提取想要的信息了. python提 ...

  6. python网络爬虫学习笔记(三):urllib库的使用

    文章目录 使用urllib库 1.urllib.request.urlopen()函数 urlopen()函数API: 2.urllib.request函数 验证 Cookies 保存Cookies ...

  7. python网络爬虫学习笔记(十一):Ajax数据爬取

    文章目录 1.基本介绍 2.基本原理 3.实战 有时候我们在用requests抓取页面的时候,得到的结果可能和在浏览器中看到的不一样:在浏览器中可以看到正常显示的页面数据,但是使用requests得到 ...

  8. python网络爬虫学习笔记(六):Requests库的使用

    文章目录 1.基础操作 1.1 GET请求 1.2 post请求 1.3 响应 2.高级用法 1.1 文件上传 2.2 Cookies 2.3 会话维持 2.4 SSL证书验证 2.5 代理设置 2. ...

  9. python网络爬虫学习笔记(十):数据存储

    文章目录 1.文本存储 2.JSON文件存储 2.1 读取JOSN 2.2 输出JSON 3.CSV文件存储 3.1 写入 3.2 读取 1.文本存储 import requests from pyq ...

最新文章

  1. 主页面调用iframe里面匿名Javascript函数的问题
  2. java字典写实例,基于JAVA的新华字典接口调用代码实例
  3. Node.js Stream(流) 简单易懂全解析
  4. Python进阶11-标准库介绍02
  5. 获取String类型汉字乱码,如何进行编码
  6. imx6 板卡移植官方yocto版本(2_定制系统)
  7. 我是如何用 Redis 做实时订阅推送的?
  8. REHL yum的配置(本地和centos源)
  9. Oracle数据库管理与开发pdf
  10. CSS padding margin border属性讲解
  11. Linux内存管理--物理内存分配【转】
  12. 如何将一个向量投影到一个平面上_CameraLidar投影:2D3D导航
  13. 面试造飞机,工作拧螺丝。
  14. appcrash事件怎么解决_突发事件中身心容易紧张焦虑,该如何控制心理压力与情绪?...
  15. sts 的js代码不变色_[黑科技] 使用 Laravel Livewire 来构建实时搜索功能(不使用一行 JS 代码)...
  16. windows和linux 修改 hosts的路径
  17. 钉钉扫码登录第三方_e签宝联合钉钉升级产品功能,共建企业服务生态闭环
  18. 阿里云云盾·Web应用防火墙 获“2018网络安全创新产品(技术)评选”一等奖
  19. 数据结构与算法面试题80道
  20. 统计学中三大相关系数

热门文章

  1. mysql set类型的用户变量,mysql用户变量的圈套
  2. 我所理解的高通UEFI之display的流程和移植
  3. 沁恒MCU从EVT中提取文件建立MounRiver独立工程
  4. 淘宝上还有卖这种服务的
  5. python入门学习之列表list
  6. shineblink电位器模拟旋钮
  7. 2019年上半年网络安全态势报告
  8. 《陈二狗妖孽人生》之经典语录
  9. [置顶]       VMWare不能安装64位操作系统原因探析
  10. 海伦公式和鞋带公式求三角形的面积