目录
AJAX 简介
任务目标
创建Ajax网站
创建服务器程序
编写爬虫程序
AJAX(Asynchronous JavaScript And XML,异步 JavaScript 及 XML)
- XMLHttpRequest 对象(与服务器异步交互数据)
- JavaScript/DOM(显示/取回信息)
- CSS(设置数据的样式)
- XML(常用作数据传输的格式)
phone.html 如下:
注:phone.html 文件要位于 templates 这个目录下
Document
选择品牌
服务器server.py程序如下:
import flask
import json
app = flask.Flask(__name__)
@app.route("/")
def index():
return flask.render_template("phone.html")
@app.route("/phones")
def getPhones():
mark = flask.request.values.get("mark")
phones = []
if mark == "华为":
phones.append({"model": "P9", "mark": "华为", "price": 3800})
phones.append({"model": "P10", "mark": "华为", "price": 4000})
elif mark == "苹果":
phones.append({"model": "iPhone5", "mark": "苹果", "price": 5800})
phones.append({"model": "iPhone6", "mark": "苹果", "price": 6800})
elif mark == "三星":
phones.append({"model": "Galaxy A9", "price": 2800})
s = json.dumps({"phones": phones}) # python对象转化为json字符串
return s
app.run()
网站结果如下:
(1) 创建一个浏览器对象driver,使用这个driver对象模拟浏览器。
(2) 访问http://127.0.0.1:5000网站,爬取第一个页面的手机数据。
(3) 从第一个页面中获取
(4) 循环options中的每个option,并模拟这个option的click点击动作,触发 onchange
爬虫程序 WebScraper.py 如下:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import time
def spider(index):
trs = driver.find_elements(By.TAG_NAME, "tr")
for i in range(1, len(trs)): # 从第二行开始查找和提取
# print(i)
tds = trs[i].find_elements(By.TAG_NAME, "td")
model = tds[0].text
price = tds[1].text
print("%-16s%-16s" % (model, price))
select = driver.find_element(By.ID, "marks")
options = select.find_elements(By.TAG_NAME, "option")
if index < len(options) - 1:
index += 1
options[index].click()
time.sleep(3)
spider(index)
chrome_options = Options()
chrome_options.add_argument('--headless')
driver = webdriver.Chrome()
driver.get("http://127.0.0.1:5000")
spider(0) # 从option=0开始
driver.close()
运行结果:
下一篇文章:5.6 Selenium等待HTML元素