使用Selenium驱动chrome页面,获得淘宝信息并用BeautifulSoup分析得到结果。

使用Selenium时注意页面的加载判断,以及加载超时的异常处理。

import json

import re

from bs4 import BeautifulSoup

from selenium import webdriver

from selenium.common.exceptions import TimeoutException

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

browser = webdriver.Chrome()

# 浏览器需要多次使用,所以单独拿出来。设置一个最长的等待时间,等待目标加载完成

wait = WebDriverWait(browser, 10)

def search(keyword):

# wait容易出现加载时间长的问题,因此用try来捕捉异常

try:

browser.get('https://www.taobao.com')

# 加载需要一定时间的,设置了等待时间,等待加载

# 输入按钮的加载等待

input = wait.until(

# 设置加载目标,它是一个选择器,参数是需要选择方式和等待加载的内容

EC.presence_of_element_located((By.CSS_SELECTOR, "#q")) # 选择CSS选择器和选择内容

)

# 提交按钮

submit = wait.until(

# EC后面是选择条件,按钮的加载条件最好的是element_to_be_clickable,意思为元素可以点击的

EC.element_to_be_clickable((By.CSS_SELECTOR, "#J_TSearchForm > div.search-button > button"))

)

input.send_keys(keyword) # send_keys对输入框输入内容

submit.click() # 提交搜索内容,进入下一个页面

# 等待页码元素加载完成,并返回最大页码数

total = wait.until(

EC.presence_of_element_located((By.CSS_SELECTOR, "#mainsrp-pager > div > div > div > div.total"))

)

# 等待加载完成后获取信息

get_products()

return total.text

except TimeoutException:

# 超时后重新请求,因此递归调用

return search()

def next_page(page_number):

try:

# 页码输入框和翻页按钮

input = wait.until(

EC.presence_of_element_located((By.CSS_SELECTOR, "#mainsrp-pager > div > div > div > div.form > input"))

)

# 提交按钮

submit = wait.until(

EC.element_to_be_clickable(

(By.CSS_SELECTOR, "#mainsrp-pager > div > div > div > div.form > span.btn.J_Submit"))

)

input.clear()

input.send_keys(page_number)

submit.click()

# 判断翻页成功

wait.until(

EC.text_to_be_present_in_element((By.CSS_SELECTOR,

'#mainsrp-pager > div > div > div > ul > li.item.active > span'),

str(page_number)))

get_products()

except TimeoutException:

return next_page(page_number)

def get_products():

# 判断单个页面是否被加载出来

wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-itemlist .items .item')))

html = browser.page_source # 获取页面源代码,所有的

# 使用BS进行分析

soup = BeautifulSoup(html, 'lxml')

items = soup.select('#mainsrp-itemlist .items .item')

for item in items:

image = item.select('.pic .img')[0]['data-src']

price = item.select('.price strong')[0].text

deal = item.select('.deal-cnt')[0].text[:-3]

title = item.select('.title')[0].text.strip()

shop = item.select('.shop')[0].text.strip()

location = item.select('.location')[0].text

product = {

'image': image,

'price': price,

'deal': deal,

'title': title,

'shop': shop,

'location': location

}

save_text(product) # 下载内容

def save_text(product):

# 保存为txt文件,a追加写模式,编码模式utf-8

with open('text.txt', 'a', encoding='utf-8') as f:

# 使用JSON把字典转换为str格式,加换行符

f.write(json.dumps(product, ensure_ascii=False) + '\n')

f.close()

def main():

# 通过关键字在淘宝进行搜索

total = search('美食')

# 用正则提取页码数字

total = int(re.compile('(\d+)').search(total).group(1))

# 翻页

for i in range(2, total+1): # 循环包含前,不包含尾

next_page(i)

browser.close()

if __name__ == '__main__':

main()

更多内容请参考专题《python爬取功能汇总》进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

python 淘宝搜索_Python使用Selenium+BeautifulSoup爬取淘宝搜索页相关推荐

  1. python + selenium多进程爬取淘宝搜索页数据

    python + selenium多进程爬取淘宝搜索页数据 1. 功能描述 按照给定的关键词,在淘宝搜索对应的产品,然后爬取搜索结果中产品的信息,包括:标题,价格,销量,产地等信息,存入mongodb ...

  2. python爬虫学习(三):使用re库爬取淘宝商品,并把结果写进txt文件

    第二个例子是使用requests库+re库爬取淘宝搜索商品页面的商品信息 (1)分析网页源码 打开淘宝,输入关键字"python",然后搜索,显示如下搜索结果 从url连接中可以得 ...

  3. python网络爬虫学习(六)利用Pyspider+Phantomjs爬取淘宝模特图片

    本篇博文在编写时参考了http://cuiqingcai.com/2652.html,向作者表示感谢 一.新的问题与工具 平时在淘宝上剁手的时候,总是会看到各种各样的模特.由于自己就读于一所男女比例三 ...

  4. 爬虫「Python」:一次登录,解决爬取淘宝商品评价繁杂的问题——简述 Headers 的使用

    在爬取淘宝商品评价时,可能会被以下几个问题所困扰: (1)直接请求,服务器要求登录帐号,怎么登录? (2)请求到的网页 Html 怎么没有我要的评价信息? (3)等等 下面介绍一下我使用的比较简单的获 ...

  5. 如何使用selenium自动化爬取淘宝信息

    如何使用自动化爬取淘宝信息 1.首先我们要确保安装了谷歌浏览器,并且是84.0版本 因为接下来我们要用到自动化这款软件,必须得和版本相匹配,否则就会失败 2.然后接下来,打开我们的taobao文件选择 ...

  6. Python爬虫自学之第(⑤)篇——爬取某宝商品信息

    题外话: <Pi Network 免费挖矿国外热门项目 一个π币大约值3元到10元>相信过去BTC的人,信不信未来的PI,了解一下,唯一一个高度与之持平的项目 能看到这里说明快进入动态网页 ...

  7. python-基于selenium库爬取微博关键词搜索内容

    python-基于selenium爬取微博关键词搜索内容 用的是谷歌浏览器 需要下载chromedriver 暂时还少了登录步骤不能爬取第一页以外的内容 爬取内容(默认了40条(还没有做到翻页所以会重 ...

  8. python爬虫酷狗_python爬虫教程:爬取酷狗音乐,零基础小白也能爬取哦

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:python学习教程 ( 想要学习Python?Pyt ...

  9. Python爬虫实战使用scrapy与selenium来爬取数据

    系列文章目录 实战使用scrapy与selenium来爬取数据 文章目录 系列文章目录 前言 一.前期准备 二.思路与运行程序 1.思路 2.运行程序 三.代码 1.代码下载 2.部分代码 总结 前言 ...

最新文章

  1. FastReport 导出pdf时中文乱码的解决办法
  2. 官方iPhone SDK和开源工具链
  3. 清华数为大数据应用低代码开发工具DWF 2021成长回顾
  4. 九度OJ-1042-最长公共子序列(LCS)
  5. [爬虫学习笔记]C# 使用 ScrapySharp 并行下载天涯图片
  6. Ubuntu9.10安装常用软件
  7. python自建模块导入_Python模块的使用及自建模块的导入方法举例
  8. javascript,css延迟加载器
  9. Distance on the tree(树上倍增+主席树+树上差分+lca)南昌网络赛
  10. Python46 mysql备份
  11. Deep Learning资源搜集
  12. 中兴2018年上半年业绩惨不忍睹,押宝5G建设能否让其起死回生?
  13. Flyweight模式
  14. ws配置 zuul_spring cloud zuul 服务网关
  15. 5个超实用的自媒体工具
  16. 7-45 航空公司VIP客户查询 (25分)
  17. 更改以太网共享属性家庭网络连接值,解决电脑笔记本连接校园网显示无internet无法开热点或开热点手机无ip分配问题
  18. TIFF图像文件格式详解(3)
  19. excel服务器源码,excel链接服务器源码
  20. 《向着光亮那方》刘同 读书笔记

热门文章

  1. YYLabel 点击富文本中的文字
  2. hadoop实践 | 各省份的学生平均成绩
  3. 西门子PID程序西门子PLC 1200和多台G120西门子变频器Modbud RTU通讯,带西门子触摸屏
  4. 解决LinuxRedhat网卡配置MAC地址冲突问题
  5. 推荐信号与系统、信号处理书籍
  6. H3C 路由器 QoS 的CBQ配置
  7. div html 下边加横线_CSS如何给文字添加下划线样式?
  8. c语言--n的k次方
  9. Draw.io--一款强大且支持在线编辑和导出的流程图绘制软件
  10. 【前端领域高频笔试面试】—— JavaScript高级相关