背景
- selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。
- selenium可以模拟真实浏览器,自动化测试工具,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题。
目标
- 爬取某城市房地产销售统计数据(商品房备案,销售信息,价格等)如图




安装扩展
- 安装Selenium:Selenium有很多语言的版本,有java、ruby、python等。我们下载python版本的就可以了。
pip install selenium
- 安装chromedriver。下载地址 npm.taobao.org/mirrors/chr…
wget https://npm.taobao.org/mirrors/chromedriver/81.0.4044.69/chromedriver_linux64.zip
unzip chromedriver_linux64.zip
cd chromedriver_linux64
mv chromedriver /usr/bin/chromedriver
- 测试
from selenium import webdriver#导入库
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--headless')
driver = webdriver.Chrome(options=chrome_options) #声明浏览器
url = 'https://www.baidu.com'
driver.get(url)#打开浏览器预设网址
print(driver.page_source)#打印网页源代码
driver.close()#关闭浏览器
页面分析
- 首页分析页面跳转链接,我们先审查页面元素,如图

- 有的a标签没有href,每个a标签都有个onclick事件
onclick="reurl(this)"
,我们来看下reurl函数内容,在控制台console.log(reurl)

- 点击输出内容,查看详细
- 我们可以清楚的看到reurl函数获取当前a标签的id属性,并且设置href属性,函数没有return,表示不阻止事件冒泡,允许执行a标签默认跳转行为
- 点击进入分幢信息页面,审查元素
- 分幢信息是一个表格,表格上面是一个a标签,点击进入楼层详细页面

onclick="s('305188')"
事件和一个class="cursor"属性, onclick="s('0')"
表示无数据,点击一个有数据查看一下

- 我们来查看弹出框怎么来的,首先还是要看s函数做了些什么




nscaler大概的意思就是传入一个数字,转换成另一个值

j函数拿到nscaler函数的值请求了一个ajax



回到控制台看下network的请求



爬取
步骤分析
=> 首页(reurl函数设置href,然后跳转)
=> 列表(a标签直接跳转)
=> 详细(s函数 ajax请求,显示弹出框)
模拟一波
from time import sleep
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--headless')
driver = webdriver.Chrome(options=chrome_options)
# 首页
driver.get('https://newhouse.0557fdc.com/')
sleep(2) # 等待加载完
driver.find_element_by_xpath('//*[@id="2622"]').click() # 模拟点击
print(driver.window_handles) # 输出下浏览器标签页
driver.switch_to.window(driver.window_handles[-1]) #切换到新打开的页面
# 列表
driver.find_element_by_xpath('//*[@id="ContentPlaceHolder1_dlBuildingList"]/tbody/tr[2]/td[1]/div').click() # 模拟点击
print(driver.window_handles) # 输出下浏览器标签页
driver.switch_to.window(driver.window_handles[-1]) # 切换到新打开的页面
# 详细
driver.find_element_by_xpath('//*[@id="ContentPlaceHolder1_HouseTable"]/tbody/tr[3]/td[2]').click() # 模拟点击
sleep(2)
print(driver.page_source)
picture_url=driver.save_screenshot('.//demo.png') # 切图留念
print("%s :截图成功!!!" % picture_url)

- 截图
后话
- 爬虫有风险,获取需谨慎,本文章仅以学习为目的
- 主要学习使用 Selenium和chromedriver,模拟人的行为爬取页面,比较简单
- 本次并没有对数据进行筛选,也没有对整个页面批量获取
- 期待下一篇(批量获取,数据筛选,字体解密,数据入库等)!!!
- 需要完整例子可加我微信

