Selenium安装
pip install selenium
pip install pyquery
自动运行浏览器
from selenium import webdriver # 从selenium导入网页内驱动软件
#如何要版本更新,可参考https://blog.csdn.net/weixin_44318830/article/details/103339273网站
browser = webdriver.Chrome('D:\APP\chromedriver.exe') # 找到浏览器驱动位置
browser.get("https://www.baidu.com/s?wd=python") # 打开网页
Selenium和其他的爬虫库有巨大的不同, 是因为他自动调用了浏览器, 并且可以有页面交互的操作
模拟输入文字内容
search_box.send_keys('python') # 模拟输入文字内容
清除输入的文本
search_box.clear() # 清除输入的文本
自动输入python 并点击百度一下按钮
from selenium import webdriver # 从selenium导入网页内驱动软件
#如何要版本更新,可参考https://blog.csdn.net/weixin_44318830/article/details/103339273网站
browser = webdriver.Chrome('D:\APP\chromedriver.exe') # 找到浏览器驱动位置
browser.get("https://www.baidu.com/") # 打开网页
search_box = browser.find_element_by_id('kw') # 找到搜索框
search_box.send_keys('python') # 模拟输入文字内容
submit_button = browser.find_element_by_id('su') # 找到查询按钮
submit_button.click() # 点击查询按钮
初始化设置
设置好 • 要搜索的关键字 • 浏览器 • 超时等待时间
KEYWORD = 'ipad' # 设置关键词
browser = webdriver.Chrome('D:\APP\chromedriver.exe') # 设置浏览器
wait = WebDriverWait(browser,10) # 设置等待时间
结构
KEYWORD = 'ipad' # 设置关键词
browser = webdriver.Chrome('D:\APP\chromedriver.exe') # 设置浏览器
wait = WebDriverWait(browser,10) # 设置等待时间
def crawl_page(page): # 定义爬取页面
pass
def get_products(): # 定义产品
pass
crawl_page(1) # 爬取第一页
crawl_page()函数结构
使用try…except结构
当try里的语句出错时会程序自动进入except里继续执行
crawl_page()函数中try里的语句25
记住要用urllib.parse.quote来处理关键字然后放到url里面
quote的功能就是对字符串进行url编码
url = 'https://s.taobao.com/search?q=' + quote(KEYWORD)
使用urllib.parse.quote可对网址中的中文进行编码 比如出现中文的搜索关键词
打开网址
url = 'https://s.taobao.com/search?q=' + quote(KEYWORD) # quote的功能就是对字符串进行url编码
browser.get(url) # 打开浏览器
分析页面
商品列表是一个class=“m-itemlist”的div
设置等待
wait.until( # 设置等待一定的时间(时间为之前设置wait的时间)
EC.presence_of_element_located( # 直到通过CSS选择器能在页面找到某个元素
(By.CSS_SELECTOR, '.item.J_MouserOnverReq')
)
)
这句代码的含义: 等待一定的时间(时间为之前设置wait的时间) 直到通过CSS选择器能在页面找到某个元素 如果超时还没有找到就继续向后执行
翻页功能——分析页面
page_box是 页码输入框
submit_button是 确定按钮
二者配合实现翻页功能
if page > 1: # 如果页码大于1
page_box = wait.until( # 设置等待一定的时间(时间为之前设置wait的时间)
EC.presence_of_element_located(
(By.CSS_SELECTOR, 'input.input.J_Input') # 找到翻页
)
) # 定位翻页
submit_button = wait.until( # 设置等待一定的时间(时间为之前设置wait的时间)
EC.element_to_be_clickable( # 直到通过CSS选择器能在页面找到某个元素
(By.CSS_SELECTOR, 'span.btn.J_Submit') # 如果超时还没有找到就继续向后执行
)
) # 定位到按钮
page_box.clear() # 清空内容
page_box.send_keys(page) # 模拟输入文字内容
submit_button.click() # 点击查询按钮
crawl_page()的全部代码
def crawl_page(page): # 定义爬取页面
try: # 尝试
url = 'https://s.taobao.com/search?q=' + quote(KEYWORD) # quote的功能就是对字符串进行url编码
browser.get(url) # 打开浏览器
time.sleep(10) # 程序等待10秒
if page > 1: # 如果页码大于1
page_box = wait.until( # 设置等待一定的时间(时间为之前设置wait的时间)
EC.presence_of_element_located(
(By.CSS_SELECTOR, 'input.input.J_Input') # 找到翻页
)
) # 定位翻页
submit_button = wait.until( # 设置等待一定的时间(时间为之前设置wait的时间)
EC.element_to_be_clickable( # 直到通过CSS选择器能在页面找到某个元素
(By.CSS_SELECTOR, 'span.btn.J_Submit') # 如果超时还没有找到就继续向后执行
)
) # 定位到按钮
page_box.clear() # 清空内容
page_box.send_keys(page) # 模拟输入文字内容
submit_button.click() # 点击查询按钮
wait.until( # 设置等待一定的时间(时间为之前设置wait的时间)
EC.presence_of_element_located( # 直到通过CSS选择器能在页面找到某个元素
(By.CSS_SELECTOR, '.item.J_MouserOnverReq')
)
)
get_products() # 爬取产品
except: # 如果异常执行以下代码
crawl_page(page) # 爬取页面
解析商品数据
get_producs()函数 通过pyquery进行解析
def get_products(): # 定义产品
html = browser.page_source # 获取源代码
doc = PyQuery(html) # 解析源代码
items = doc('.item.J_MouserOnverReq').items() # 定位商品
for item in items: # 循环遍历,提取产品信息
product = {
'image': item.find('.img').attr('data-src'), # 提取图片信息
'price': item.find('.price').text(), # 提取价格
'deal': item.find('.deal-cnt').text(), # 提取成交量
'title': item.find('.title').text(), # 提取标题
'shop': item.find('.dsrs').text(), # 提取店铺名
'location': item.find('.location').text() # 提取地址
}
print(product) # 输出产品
完整代码:
from selenium import webdriver # 从selenium导入网页内驱动软件包
from selenium.common.exceptions import TimeoutException # 导入超时请求包
from selenium.webdriver.common.by import By # by方法
from selenium.webdriver.support import expected_conditions as EC #
from selenium.webdriver.support.ui import WebDriverWait # 定义等待时间
from urllib.parse import quote # 把汉字转码
from pyquery import PyQuery # 解析包
import time # 导入时间模块
KEYWORD = 'ipad' # 设置关键词
browser = webdriver.Chrome('D:\APP\chromedriver.exe') # 设置浏览器
wait = WebDriverWait(browser,10) # 设置等待时间
def crawl_page(page): # 定义爬取页面
try: # 尝试
url = 'https://s.taobao.com/search?q=' + quote(KEYWORD) # quote的功能就是对字符串进行url编码
browser.get(url) # 打开浏览器
time.sleep(10) # 程序等待10秒
if page > 1: # 如果页码大于1
page_box = wait.until( # 设置等待一定的时间(时间为之前设置wait的时间)
EC.presence_of_element_located(
(By.CSS_SELECTOR, 'input.input.J_Input') # 找到翻页
)
) # 定位翻页
submit_button = wait.until( # 设置等待一定的时间(时间为之前设置wait的时间)
EC.element_to_be_clickable( # 直到通过CSS选择器能在页面找到某个元素
(By.CSS_SELECTOR, 'span.btn.J_Submit') # 如果超时还没有找到就继续向后执行
)
) # 定位到按钮
page_box.clear() # 清空内容
page_box.send_keys(page) # 模拟输入文字内容
submit_button.click() # 点击查询按钮
wait.until( # 设置等待一定的时间(时间为之前设置wait的时间)
EC.presence_of_element_located( # 直到通过CSS选择器能在页面找到某个元素
(By.CSS_SELECTOR, '.item.J_MouserOnverReq')
)
)
get_products() # 爬取产品
except: # 如果异常执行以下代码
crawl_page(page) # 爬取页面
def get_products(): # 定义产品
html = browser.page_source # 获取源代码
doc = PyQuery(html) # 解析源代码
items = doc('.item.J_MouserOnverReq').items() # 定位商品
for item in items: # 循环遍历,提取产品信息
product = {
'image': item.find('.img').attr('data-src'), # 提取图片信息
'price': item.find('.price').text(), # 提取价格
'deal': item.find('.deal-cnt').text(), # 提取成交量
'title': item.find('.title').text(), # 提取标题
'shop': item.find('.dsrs').text(), # 提取店铺名
'location': item.find('.location').text() # 提取地址
}
print(product) # 输出产品
crawl_page(2) # 爬取第一页