淘宝页面商品信息的抓取
文章目录
- 概述
- 登录淘宝
- 商品搜索页面的访问
- 应对反爬虫的一些尝试
概述
使用selenium登录淘宝并抓取关键字"iPad"对应页面的商品信息。
页面的抓取使用requests应该也能做到,这次的话使用selenium获取每一页的信息,然后用pyquery对页面信息进行处理。
环境
版本:python3.8
所需的关键库:selenium、pyquery
需要用到的软件:chromedriver
和chrome
登录淘宝
如果要用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设置为随机数。遗憾的是,使用这样的方法依然会被发现。网站反爬虫的方式挺多的,我不清楚在这里触发网站的反爬虫机制的具体原因。
淘宝页面商品信息的抓取相关推荐
- 网络爬虫爬取淘宝页面商品信息
网络爬虫爬取淘宝页面商品信息 最近在MOOC上看嵩老师的网络爬虫课程,按照老师的写法并不能进行爬取,遇到了一个问题,就是关于如何"绕开"淘宝登录界面,正确的爬取相关信息.通过百度找 ...
- Python爬虫——4.6使用requests和正则表达式、随机代理爬取淘宝网商品信息
# coding:utf-8 ''' 使用requests模块,使用代理,进行淘宝网商品信息的爬取 ''' # 引入需要的模块 import requests import random import ...
- python +selenium 爬取淘宝网商品信息
前几天用python爬取豆瓣关于电影<长城>的影评,发现豆瓣的网页是静态的,心中一阵窃喜.以为对于动态网页了解的不是太多.但是主要是用cookie加headers爬取的.效果还不错,爬取了 ...
- python使用requests库爬取淘宝指定商品信息
python使用requests库爬取淘宝指定商品信息 在搜索栏中输入商品 通过F12开发者工具抓包我们知道了商品信息的API,同时发现了商品数据都以json字符串的形式存储在返回的html内 解析u ...
- 用Python爬取淘宝网商品信息
用Python爬取淘宝网商品信息 转载请注明出处 网购时经常会用到淘宝网 点我去淘宝但淘宝网上的商品琳琅满目,于是我参照中国大学 MOOC的代码写了一个爬取淘宝网商品信息的程序 代码如下: impor ...
- 实现从淘宝(天猫)定时抓取订单数据、打印电子面单并保存到ERP表中
实现从淘宝(天猫)定时抓取订单数据.打印电子面单并保存到ERP表中 前言 实现思路 代码片段参考 前言 最近有厂商提出想把天猫店铺的数据拿到后台ERP管理系统中,并能实现线下打印电子面单功能.接手这个 ...
- 关于淘宝网评论数据的抓取
关于淘宝网评论数据的抓取 第一步 如何获取商品基本信息 我们打开多张淘宝的商品网页,分析网页的URL组成,寻找其中的规律,下面给出一个例子 我们发现了一个规律就是http://item.taobao. ...
- Python爬虫模拟浏览器的headers、cookie,爬取淘宝网商品信息
一. 淘宝商品信息定向爬虫 二. 爬虫基础:正则表达式 三. 淘宝页面查看与分析 四. 爬虫源码 一. 淘宝商品信息定向爬虫 注意淘宝的robots.txt不允许任何爬虫爬取,我们只在技术层面探讨这一 ...
- 爬虫(6)-使用selenium爬取淘宝天猫商品信息(价格,销售量等)
文章目录 1.只读取第一页 1.1准备工作 1.2.定位 1.3.获取商品信息 1.4. 整体代码 1.5.输出结果展示 1.6改进,存储在CSV文件内并分行存储 2.读取多页商品信息 2.1部分问题 ...
最新文章
- maven工程导入项目打开404_Maven依赖配置和依赖范围
- JS时间戳和时间互转
- java访问其它服务器,一个Java Web应用程序是否可以在tomcat服务器的同一本地主机中调用另一个Java Web应用程序...
- creo配置文件config选项详解_5年资深架构师重点聚焦:SpringBoot的配置详解+内嵌Servlet容器
- 无法读取项目文件 .csproj
- Linux设备驱动——PCI总线的初始化
- 自来水公司SCADA调度系统方案
- jdk工具keytool和jarsigner帮助(jdk keytooljarsigner tool manual)
- 让“施工进度计划”真正产生价值——不是为了做计划而计划
- python成绩统计_利用python进行学生成绩分析
- java excel多选_POI生成可多选下拉框excel
- 计算天数 python
- 随身WIFI刷入debian
- win10 不能使用 ps3相机
- 在JavaScript中创建SVG矢量图EAN13条码
- 建筑企业“出租脚手架”究竟如何缴纳增值税
- 微信分身 android,微信分身版安卓版
- informatica 许可_安装Informatica9.5.1
- BigDecimal 往左移动两位小数_人教版小学数学四年级下册 小数点位置移动引起小数大小的变化 教案、课件,公开课视频...
- FPGA之4K图像处理