bs4+phantomjs爬取安居客二手房信息
来源:互联网 发布:淘宝刷手 编辑:程序博客网 时间:2024/04/27 19:00
bs4+phantomjs爬取安居客二手房信息
这是我的第一篇博客,希望通过养成写博客的习惯来督促自己学习。
开发环境以及需要安装的模块
- Python3.6
- requests pip install requests
- BeautifulSoup4 pip install BeautifulSoup4
- selenium pip install selenium
- phantomjs 官网http://phantomjs.org/
分析
1、先来看下安居客移动端页面https://m.anjuke.com/sh/sale/pudong/?from=filterarea
2、点击 浦东 , 弹出菜单,左边是区,后边是商圈。
3、不停下拉直至出现,没有更多
我们用phantomjs来模拟浏览器操作。
需要注意的点:
某些商圈没有二手房信息,会在页面上显示 “没有符合条件的房源,请修改条件或关键词”。如青浦区下面的青东农场。
步骤
以安居客上海二手房为例。
为了尽量爬取更多的信息,以区为单位爬取。
以浦东为例:
- 获取浦东地区所有商圈的链接
- 对于每个商圈获取其页面
- 下拉至出现 没有更多
- 下载其HTML代码
- 利用bs4分析获取item
- 以json格式写入文件
如何获得每个区的链接我就不说了。
如和使用bs4我也不说了。
项目结构
Anjuke
—— anjuke.py
—— config.py
代码块
以下anjuke.py是部分代码
''' step-1.获取所有商圈的移动端页面 step-2.每个页面模拟下拉直至完全显示 step-3.解析页面获得items step-4.将items写入文件'''def main(): # init start_url = 'https://m.anjuke.com/sh/sale/pudong/?from=filterarea' browser = webdriver.PhantomJS('E:\\phantomjs\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe') #browser = webdriver.Firefox() browser.start_session(dynamic_headers()) # 设置动态头部 browser.get(start_url) # step-1 for url in get_business_districts_url(browser.page_source): # step-2 browser.start_session(dynamic_headers()) browser.implicitly_wait(5) browser.set_page_load_timeout(10) browser.set_script_timeout(10) browser.get(url) count = 0 log('正在爬取 %s' %url) # 这里加个try/catch, 因为某些商圈是没有二手房信息 try: if browser.find_element_by_class_name('noresult'): log('没有符合条件的房源!') log('爬取 %s 结束' % url) continue except NoSuchElementException: pass while True: time.sleep(random.randint(2, 4)) # 每次下拉后等待 nomore = browser.find_element_by_id('nomore') # 没有更多 if nomore.get_attribute('style') != 'display: block;': browser.execute_script('window.scrollTo(0,document.body.scrollHeight)') count += 1 log('下拉 %d 次' %count) else: break # step-3, step-4 for house_item in parse(browser.page_source): save(house_item) log('爬取 %s 结束' %url) time.sleep(random.randint(3, 5))''' 得到商圈的链接'''def get_business_districts_url(html): soup = BeautifulSoup(html, 'lxml') districts = soup.select('#rsswitchinfo .blockinfo .blocklist a') for tag_a in districts: tag_a_text = tag_a.get_text().strip() if(tag_a_text != '全部'): yield tag_a.attrs['href']''' 动态headers配置, 设置User-Agent和Proxy'''def dynamic_headers(): dc = DesiredCapabilities.PHANTOMJS.copy() dc['phantomjs.page.settings.userAgent'] = random.choice(MOBILE_USER_AGENTS) dc["phantomjs.page.settings.loadImages"] = False ''' proxy = webdriver.Proxy() proxy.proxy_type = ProxyType.MANUAL proxy.http_proxy = '' proxy.add_to_capabilities(dc) ''' return dcdef save(content): with open('result3.txt', 'a', encoding='utf-8') as file: line = json.dumps(dict(content), ensure_ascii=False) + '\n' file.write(line) file.close()
以下config.py是部分代码
MOBILE_USER_AGENTS=[ 'Mozilla/5.0 (Linux; U; Android 5.1; zh-cn; m1 metal Build/LMY47I) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 Chrome/37.0.0.0 MQQBrowser/7.6 Mobile Safari/537.36', 'Mozilla/5.0 (Linux; Android 5.1.1; vivo X7 Build/LMY47V; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/48.0.2564.116 Mobile Safari/537.36 baiduboxapp/8.6.5 (Baidu; P1 5.1.1)', 'Mozilla/5.0 (iPhone 6s; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 MQQBrowser/7.6.0 Mobile/14E304 Safari/8536.25 MttCustomUA/2 QBWebViewType/1 WKType/1', 'Mozilla/5.0 (iPhone 6s; CPU iPhone OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 MQQBrowser/7.5.1 Mobile/13G36 Safari/8536.25 MttCustomUA/2 QBWebViewType/1 WKType/1', 'Mozilla/5.0 (Linux; U; Android 6.0.1; zh-cn; Redmi 3X Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 Chrome/37.0.0.0 MQQBrowser/7.2 Mobile Safari/537.36', 'Mozilla/5.0 (Linux; U; Android 4.4.2; zh-CN; HUAWEI MT7-TL00 Build/HuaweiMT7-TL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/40.0.2214.89 UCBrowser/11.3.8.909 Mobile Safari/537.36', 'Mozilla/5.0 (Linux; U; Android 6.0.1; zh-CN; F5121 Build/34.0.A.1.247) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/40.0.2214.89 UCBrowser/11.5.1.944 Mobile Safari/537.36', 'Mozilla/5.0 (Linux; U; Android 7.0; zh-CN; VIE-AL10 Build/HUAWEIVIE-AL10) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/40.0.2214.89 UCBrowser/11.4.2.936 Mobile Safari/537.36', 'Mozilla/5.0 (Linux; U; Android 7.0; zh-cn; MI 5 Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 Chrome/37.0.0.0 MQQBrowser/7.1 Mobile Safari/537.36', 'Mozilla/5.0 (Linux; U; Android 6.0.1; zh-cn; SM-C5000 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 Chrome/37.0.0.0 MQQBrowser/7.5 Mobile Safari/537.36', 'Mozilla/5.0 (Linux; U; Android 6.0.1; zh-cn; MI NOTE LTE Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.146 Mobile Safari/537.36 XiaoMi/MiuiBrowser/8.8.7', 'Mozilla/5.0 (Linux; U; Android 6.0.1; zh-cn; vivo X9 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 Chrome/37.0.0.0 MQQBrowser/7.6 Mobile Safari/537.36', 'Mozilla/5.0 (iPhone 6; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 MQQBrowser/7.6.0 Mobile/14E277 Safari/8536.25 MttCustomUA/2 QBWebViewType/1 WKType/1']
阅读全文
0 0
- bs4+phantomjs爬取安居客二手房信息
- scrapy安居客二手房爬取
- 安居客信息爬取
- Python爬取安居客新房信息
- 爬取二手房信息
- 用bs爬取安居客优秀经理人信息
- 爬取二手房信息v2
- 使用bs4爬取链家网的二手房信息
- 简单Python爬取链接二手房信息
- php爬取安居客小区数据
- requests-re-bs4 定向爬取股票信息
- 使用BS4爬取 51job 一页的招聘信息
- Python3 去掉bs4爬取信息中的‘\t’'\r' '\r'
- 使用网络爬虫爬取新浪二手房网站中的西安二手房信息
- 爬取58同城的二手房信息
- python3 [爬虫实战] selenium + requests 爬取安居客
- python3 [爬虫实战] selenium + requests 爬取安居客
- 【R语言 爬虫】用R爬虫,爬取杭州安居客九堡租房信息
- leetcode题目例题解析(九)
- @那些想要转行AI的人:送你一份人工智能入门指南
- 逆向分析笔记171103
- 科技公司狂挖高校AI学者:涸泽而渔还是产学双赢
- 冠军奖30万!刘强东搞了个“猪脸识别”比赛,中美两地同时启动(附比赛详细日程及赛题说明)
- bs4+phantomjs爬取安居客二手房信息
- RabbitMQ 在 windows 上的安装
- 猎场,郑秋冬,黑钱跑路(北京一套房500万)
- layui实现分页
- 欢迎使用CSDN-markdown编辑器
- BRISK特征匹配
- 为什么你赚不到钱-读《您厉害,您赚得多》
- 快速幂
- netstat命令详解