文章目录

  • 概述
  • 登录淘宝
  • 商品搜索页面的访问
  • 应对反爬虫的一些尝试

概述

使用selenium登录淘宝并抓取关键字"iPad"对应页面的商品信息。

页面的抓取使用requests应该也能做到,这次的话使用selenium获取每一页的信息,然后用pyquery对页面信息进行处理。

环境

版本:python3.8

所需的关键库:selenium、pyquery

需要用到的软件:chromedriverchrome

登录淘宝

如果要用requests访问登录后的页面,则在请求头中加入cookies信息即可,cookies信息可以从浏览器控制台通过document.cookie获得。但使用selenium的话要更麻烦一些,因为如果要想selenium模拟的浏览器中加入cookie,得一条一条cookie加入,上图做个对比:

左下角的是一连串的cookies,等号左边是cookie的名称,等号右边是cookie的值;如果使用requests,则将这一连串的cookies加入到headers中即可。而右图中则是一条一条的cookie,每条cookie都有name、value、domain等几个字段,如果你使用selenium,则需要将一条cookie处理成{"domain": ".taobao.com", "expiry": 1635516014, "httpOnly": false, "name": "l", "path": "/", "secure": false, "value": "eBj61Tjejomnbu7SBOfanurza77OSIRYYuPzaNbMiOCPO_CB5UlPW61E8nY6C3Gch63JR3xIkQOzBeYBqQAonxvOvhLyCdMmn"}的形式,然后使用add_cookie()将其加入到浏览器对象中。

这里参考了两条博客:

selenium使用cookie实现免密登录

[selenium加载cookie报错问题:selenium.common.exceptions.InvalidCookieDomainException: Message: invalid cookie domain](https://www.cnblogs.com/deliaries/archive/2020/12/11/14121204.html)

根据博客一第一次访问淘宝搜索页面时可以先手动扫码登录,然后获取到页面的cookie,保存下来,后面就能通过这些cookies自动的爬取数据了。

代码如下:

"""
Created on Sun May  2 15:12:44 2021@author: Team317
"""from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from urllib.parse import quote
import json
import time
from pyquery import PyQuery as pq
import sys
from random import randint,randomdef get_cookie():#手动获取cookiesbrowser = webdriver.Chrome()wait = WebDriverWait(browser, 10)# 先访问登录页面login_url = 'https://login.taobao.com/member/login.jhtml?redirectURL=http%3A%2F%2Fs.taobao.com%2Fsearch%3Fq%3DiPad&uuid=6b5f203675de0dfb1d09899a2572b80b'browser.get(login_url)# 得到登录页面的cookiecookies = browser.get_cookies()# 访问搜索页面KEYWORD = 'iPad'url = 'https://s.taobao.com/search?q={keyword}'.format(keyword = KEYWORD)# 手动登录成功后输入Y继续ok = input("Are you ok?[Y/N]")# 输入N时退出程序if ok != 'Y':browser.close()sys.exit()browser.get(url)# 获取搜索页面的cookiecookie = browser.get_cookies()for cook in cookie:cookies.append(cook)# 保存cookies信息with open("taobao_cookies.txt","w") as file:file.write(json.dumps(cookies))# # 关闭浏览器# browser.close()return browser, wait

在taobao_cookies.txt文件中保存了网页的每条cookie,如下图,

这是其中的三条,有了cookies,后面就更方便了。

商品搜索页面的访问

用selenium登录淘宝后通过控制底部的页面访问栏来跳转页面:

先向页面搜索框输入页面号,再模拟点击确定按钮,跳转到指定页面后即可抓取页面信息,代码如下:


def load_cookie():browser = webdriver.Edge()# 每次跳转请求页面的等待时间为20秒,超出20秒时产生超时异常wait = WebDriverWait(browser, 10)# 读取cookieswith open("taobao_cookies.txt") as file:cookies = json.loads(file.read())# 首先访问登录页面login_url = 'https://login.taobao.com/member/login.jhtml?redirectURL=http%3A%2F%2Fs.taobao.com%2Fsearch%3Fq%3DiPad&uuid=6b5f203675de0dfb1d09899a2572b80b'browser.get(login_url)# 然后加载cookiesfor cook in cookies:try:browser.add_cookie(cook)except:# 打印被舍弃的cookieprint(cook)print("*********************")return browser, wait# 访问第index个页面
def index_page(browser, wait, page, keyword):print("正在爬取第{page}页".format(page = page))try:# 访问搜索页面url = 'https://s.taobao.com/search?q={keyword}'.format(keyword = keyword)time.sleep(random()*10 + 2)browser.get(url)if page > 1: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')))time.sleep(random()*10 + 2)input.clear()time.sleep(random()*10 + 2)input.send_keys(page)time.sleep(random()*10 + 2)submit.click()time.sleep(random()*10 + 2)# 等待页面被加载出来wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, '#mainsrp-pager > div > div > div > ul > li.item.active > span'),str(page)))wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-itemlist > div > div > div')))time.sleep(random()*10 + 4)# 获取页面信息get_products(browser)print("第{page}页抓取完成".format(page=page))except TimeoutException:# 出现超时时不再继续,结束程序print('超时')browser.close()sys.exit()def get_products(browser):html = browser.page_sourcedoc = pq(html)items = doc('#mainsrp-itemlist > div > div > div:nth-child(1) > div').items()with open("products_info.txt", 'a+') as file:for item in items:product = {'image':item.find('.pic .img').attr('data-src'),'price':item.find('price').text(),'deal':item.find('.deal-cnt').text(),'title':item.find('.title').text(),'shop':item.find('.shop').text(),'location':item.find('.location').text()}# print(product)# print("************")info = json.dumps(product) + '\n'file.write(info)if __name__ == '__main__':# 首次登录标志is_first = Trueif is_first == True:# 首次登录时,手动扫码淘宝,获取cookiesbrowser,wait = get_cookie()else:# 如果之前登录过,则从文件中加载cookiesbrowser,wait = load_cookie()# 之后自动化的抓取页面信息for i in range(1,10):index_page(browser, wait, i, 'iPad')# 等待几秒再访问,以防被察觉time.sleep(random()*10 + 10)browser.close()

应对反爬虫的一些尝试

在实验过程中,我的反复尝试被淘宝发现了,然后就弹出了下面这个验证框:


关键是这个验证框是没法验证的,当你将滑块拖动到最右边之后依然停留在这个页面,可能是我的账号被记住了或者被封ip了,一段时间内不能再访问,使用代理进行访问会更安全一些。

为防止这一情况发生,我尝试着在每一次模拟操作之后等待一段时间再进行下一次操作,于是在代码中就多了很多的time.sleep()语句,并将等待的时间用random设置为随机数。遗憾的是,使用这样的方法依然会被发现。网站反爬虫的方式挺多的,我不清楚在这里触发网站的反爬虫机制的具体原因。

淘宝页面商品信息的抓取相关推荐

  1. 网络爬虫爬取淘宝页面商品信息

    网络爬虫爬取淘宝页面商品信息 最近在MOOC上看嵩老师的网络爬虫课程,按照老师的写法并不能进行爬取,遇到了一个问题,就是关于如何"绕开"淘宝登录界面,正确的爬取相关信息.通过百度找 ...

  2. Python爬虫——4.6使用requests和正则表达式、随机代理爬取淘宝网商品信息

    # coding:utf-8 ''' 使用requests模块,使用代理,进行淘宝网商品信息的爬取 ''' # 引入需要的模块 import requests import random import ...

  3. python +selenium 爬取淘宝网商品信息

    前几天用python爬取豆瓣关于电影<长城>的影评,发现豆瓣的网页是静态的,心中一阵窃喜.以为对于动态网页了解的不是太多.但是主要是用cookie加headers爬取的.效果还不错,爬取了 ...

  4. python使用requests库爬取淘宝指定商品信息

    python使用requests库爬取淘宝指定商品信息 在搜索栏中输入商品 通过F12开发者工具抓包我们知道了商品信息的API,同时发现了商品数据都以json字符串的形式存储在返回的html内 解析u ...

  5. 用Python爬取淘宝网商品信息

    用Python爬取淘宝网商品信息 转载请注明出处 网购时经常会用到淘宝网 点我去淘宝但淘宝网上的商品琳琅满目,于是我参照中国大学 MOOC的代码写了一个爬取淘宝网商品信息的程序 代码如下: impor ...

  6. 实现从淘宝(天猫)定时抓取订单数据、打印电子面单并保存到ERP表中

    实现从淘宝(天猫)定时抓取订单数据.打印电子面单并保存到ERP表中 前言 实现思路 代码片段参考 前言 最近有厂商提出想把天猫店铺的数据拿到后台ERP管理系统中,并能实现线下打印电子面单功能.接手这个 ...

  7. 关于淘宝网评论数据的抓取

    关于淘宝网评论数据的抓取 第一步 如何获取商品基本信息 我们打开多张淘宝的商品网页,分析网页的URL组成,寻找其中的规律,下面给出一个例子 我们发现了一个规律就是http://item.taobao. ...

  8. Python爬虫模拟浏览器的headers、cookie,爬取淘宝网商品信息

    一. 淘宝商品信息定向爬虫 二. 爬虫基础:正则表达式 三. 淘宝页面查看与分析 四. 爬虫源码 一. 淘宝商品信息定向爬虫 注意淘宝的robots.txt不允许任何爬虫爬取,我们只在技术层面探讨这一 ...

  9. 爬虫(6)-使用selenium爬取淘宝天猫商品信息(价格,销售量等)

    文章目录 1.只读取第一页 1.1准备工作 1.2.定位 1.3.获取商品信息 1.4. 整体代码 1.5.输出结果展示 1.6改进,存储在CSV文件内并分行存储 2.读取多页商品信息 2.1部分问题 ...

最新文章

  1. maven工程导入项目打开404_Maven依赖配置和依赖范围
  2. JS时间戳和时间互转
  3. java访问其它服务器,一个Java Web应用程序是否可以在tomcat服务器的同一本地主机中调用另一个Java Web应用程序...
  4. creo配置文件config选项详解_5年资深架构师重点聚焦:SpringBoot的配置详解+内嵌Servlet容器
  5. 无法读取项目文件 .csproj
  6. Linux设备驱动——PCI总线的初始化
  7. 自来水公司SCADA调度系统方案
  8. jdk工具keytool和jarsigner帮助(jdk keytooljarsigner tool manual)
  9. 让“施工进度计划”真正产生价值——不是为了做计划而计划
  10. python成绩统计_利用python进行学生成绩分析
  11. java excel多选_POI生成可多选下拉框excel
  12. 计算天数 python
  13. 随身WIFI刷入debian
  14. win10 不能使用 ps3相机
  15. 在JavaScript中创建SVG矢量图EAN13条码
  16. 建筑企业“出租脚手架”究竟如何缴纳增值税
  17. 微信分身 android,微信分身版安卓版
  18. informatica 许可_安装Informatica9.5.1
  19. BigDecimal 往左移动两位小数_人教版小学数学四年级下册 小数点位置移动引起小数大小的变化 教案、课件,公开课视频...
  20. FPGA之4K图像处理

热门文章

  1. 简析巴黎圣母院与育碧
  2. oracle 函数位图索引,位图索引
  3. 工作流初始错误 泛微提交流程提示_泛微OA 工作流WebService接口使用说明
  4. 10年程序员职业生涯感悟—写给正在迷茫的你
  5. spring boot大学生综合素质测评系统 毕业设计源码162308
  6. boost库使用—asio库
  7. 02 微架构教务系统——课程搜索接口
  8. 最新改良版彩虹代刷知识付费模板系统
  9. 中学地理教学参考杂志社中学地理教学参考编辑部2022年第10期目录
  10. 【转】StretchBlt函数和BitBlt函数的用法