安居客爬虫(selenium实现)

第一次写在博客上写爬虫“教程”,如果有不对的地方还望各位给予指正。

先讲一下思路吧,selenium有点击和输入模拟,所以打开链接后----->想网页输入想查询的城市------>到了相应的页面再点击相应的按钮------>获取页面中所有信息------>点击“下一页”------>循环获取网页内容。

1.写好注释,导入模块。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#导入模块
from selenium import webdriver
import time
import os
import random
import datetime

2.查询租房信息,该网站只提供50页的租房信息,所以爬取50页,由于第50页时,点击下一页无反应,会报错,所以添加一个异常处理。    PS:英语水平有限,只好拼音代替,还望各位不要嫌弃,目前正在努力学习英语中,以后会逐渐改成纯英文。#查询租房信息

#查询租房信息
def search_home(city):    
    url = 'https://www.anjuke.com/sy-city.html'
    browser = webdriver.Chrome()
    browser.get(url)
    #点击相应的按钮。。。。。。
    browser.find_element_by_link_text(city).click()
    browser.find_element_by_link_text('租 房').click()
    #创建列表,用来存储爬取到的信息。
   jia_ge = []
    title = []
    xin_xi = []
    di_zhi = []
    n = 1
#循环获得每一页的信息,只能爬取50页。
    while n < 51:
        title_l = browser.find_elements_by_xpath('//h3//a[@target="_blank"]')
        xin_xi_l = browser.find_elements_by_xpath('//p[@class="details-item tag"]')
        di_zhi_l = browser.find_elements_by_xpath('//address[@class="details-item"]')
        jia_ge_l = browser.find_elements_by_xpath('//div[@class="zu-side"]')
        for aa,bb,cc,dd in zip(title_l,xin_xi_l,di_zhi_l,jia_ge_l):
            title.append(aa.text)
            xin_xi.append(bb.text)
            di_zhi.append(cc.text)
            jia_ge.append(dd.text)
        n += 1
        try:
            browser.find_element_by_xpath('//a[@class="aNxt"]').click()
        except:
            pass
    time.sleep(random.randint(1,3))
    browser.quit()
    return title,xin_xi,di_zhi,jia_ge
  

 

3. 写入文本中。由于还未学习数据库,只能暂时写一个存储到文本文档中的函数了。。。。。。。

  由于作者用linux写的爬虫,所以文件路径与windows不一样。

os.mkdir()是创建一个空文件夹,之所以用了一个异常处理,是因为在写爬虫时需要调试一下,如果文件已存在会报错。

 

#写入文件中
def write_txt(tuples,city):
    file = '/home/123456/桌面/%s' % city
    try:
        os.mkdir(file)
    except:
        pass
    with open('%s/%s.txt' % (file,city),'w') as txt:
        for wa,wb,wc,wd in zip(tuples[0],tuples[1],tuples[2],tuples[3]):
            txt.write('标题:  %s,  信息:  %s,  地址:  %s,  价格:  %s\n\n\n' % (wa,wb,wc,wd))
    return txt.close()

  4.运行程序。                                                                                                                                         谢谢大家的阅读。

#运行程序。
print('...............start...............')
start_time = datetime.datetime.now()
city = input('请输入你想要查询的城市:')
city_dict = search_home(city=city)
write_txt(tuples=city_dict,city=city)
end_time = datetime.datetime.now()
cha = (end_time - start_time).seconds
print('此次运行耗时%s秒。' % cha)
print('...........end.............')  
posted @ 2018-03-19 21:00  嚯嚯嚯  阅读(1553)  评论(0编辑  收藏  举报