第一次写在博客上写爬虫“教程”,如果有不对的地方还望各位给予指正。
先讲一下思路吧,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.............')