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