1.一般使用Selenium 爬取页面 就以下步骤:
1.使用Selenium 请求页面
2.使用wait.until()等到指定的元素标签被加载出来,才继续往下执行,开始打印源码,否则抛出异常。
3.得到源码后 使用BeautifulSoup 解析库 解析页面 获取数据 别的解析库也行。
4.入库。
5.代码 :
# -*- coding:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
from bs4 import BeautifulSoup
import sys
reload(sys)
sys.setdefaultencoding('utf8')
# 构造一个webdriver对象 使用谷歌浏览器
broser = webdriver.Chrome()
# 显示等待 10s
wait = WebDriverWait(broser, 10)
# KEYWORD = 'ipad'
# 通过传入的页码进行页面跳转 获取源码 把源码传入解析商品 获取 所需字段
def index_page(page):
print '正在抓取第',page,'页'
try:
url = 'https://s.taobao.com/search?initiative_id=staobaoz_20190628&q=ipad'
# 请求url
broser.get(url)
if page > 0:
print '1'
# 等待指定的selector被加载出来 否则 抛出异常 (输入框标签)
input = wait.until(EC.presence_of_element_located(
(By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > input')))
print '2'
# 等待指定的selector被加载出来 否则 抛出异常 (点击标签)
submit = wait.until(EC.presence_of_element_located(
(By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit')))
print '3'
# 清空文本框
input.clear()
# 在指定的文本框中 输入页码
input.send_keys(page)
# 点击
submit.click()
# 等待指定的selector被加载出来 否则 抛出异常 (判断当前高亮的页面是当前的页码数 即可)
wait.until(EC.text_to_be_present_in_element(
(By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > ul > li.item.active > span'), str(page)))
print '4'
# 等待指定的selector被加载出来 否则 抛出异常 (要爬取的列表标签)
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-itemlist > div')))
print '源码: ', broser.page_source
# 当前页码的源码
html = broser.page_source
# 调用get_products 解析页面 获取信息
get_products(html)
except TimeoutException:
print '爬取出错'
index_page(page)
# 使用BeautifulSoup 解析商品列表 获取商品信息
def get_products(html):
print '开始解析源码,获取数据....'
soup = BeautifulSoup(html, 'lxml')
# 根据BeautifulSoup提供的诸多方法解析页面 获取到所需信息 具体操作 略
# soup.select_one()
# soup.select()
# soup.findAll()
# soup.find()
# 最后入库
insert_db()
# BeautifulSoup 获取到信息后 就需要数据清洗 存入数据库 或者excel ,cvs等文件中
def insert_db():
print '开始 清洗数据 ,入库....'
# 连接数据库 存入数据
# 或者写入excel
# main
def main():
""""
遍历每一页
"""
for i in range(1,3):
index_page(i)
if __name__ == "__main__":
main()
# 关闭浏览器
broser.close()