第一次写在博客上写爬虫“教程”,如果有不对的地方还望各位给予指正。
先讲一下思路吧,selenium有点击和输入模拟,所以打开链接后----->想网页输入想查询的城市------>到了相应的页面再点击相应的按钮------>获取页面中所有信息------>点击“下一页”------>循环获取网页内容。
1.写好注释,导入模块。
#!/usr/bin/env python3# -*- coding: utf-8 -*-#导入模块from selenium import webdriverimport timeimport osimport randomimport 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).secondsprint('此次运行耗时%s秒。' % cha)print('...........end.............')