项目要求:爬取淘宝某领域下的商品名称,价格,评论。

(我贼怂,如果阿里巴巴的朋友发现,请联系我,我立刻删帖,谢谢。)

一、构思流程

模拟登陆
获取cookie
scrapy爬取数据

二、分步分析

(一)、测试cookie是否能够满足我们爬取相应数据的要求

(确定了cookie能满足我们的需求,才能确保项目的可行性)
1、安装scrapy框架(直接pip安装就行)

pip install scrapy

2、创立项目对应爬虫

>cd 相应目录
相应目录>scrapy startproject taobao
相应目录>cd taobao2
相应目录\taobao>scrapy genspider nanzhuang taobao.com

3、修改爬虫文件,使用cookie进入搜索页面
在知道项目目标之后查找元素

其中蓝色框中的各个小项就是我们的目标。
我们手动点开这些小项后却发现需要登陆(未登录状态)
接着手动登录,登录后刷新获取网页的cookie.

获取cookie后将其写入爬虫的setting文件中

然后尝试修改nanzhuang.py进行爬取

import scrapyclass XuexiSpider(scrapy.Spider):name = 'xuexi'allowed_domains = ['taobao.com']start_urls = ['https://www.taobao.com/markets/nanzhuang/2017new']def parse(self, response):for it in response.xpath('//*[@id="sm-nav-2014"]/div[2]/div[2]/div/div[2]/dl'):#使用xpath+for循环的模式遍历所有小项for n in it.xpath('./dd'):try:li = n.xpath('./a/@href').extract()[0]yield scrapy.Request(li,callback = self.parse_detail)#将获取到的网址返回进行访问和解析except:passdef parse_detail(self,response):pass

运行一次爬虫试试

爬虫文件夹目录>scrapy crawl nanzhuang

如果结果为以下,说明你的cookie能让爬虫爬取相应页面

接着寻找我们需要的元素
方案一、用xpath直接获取价格,商品名称。但是发现用了js,而且获取不到正确的价格。所以被我pass掉了,你们可以尝试。
方案二、直接使用re
先检查网页源代码查找价格,商品名称。

回到爬虫文件进行修改
item.py:


import scrapyclass Taobao2Item(scrapy.Item):# define the fields for your item here like:title = scrapy.Field()price = scrapy.Field()nid = scrapy.Field()

nanzhuang.py:

import scrapy
import re
from taobao2.items import Taobao2Itemclass NanzhuangSpider(scrapy.Spider):name = 'nanzhuang'allowed_domains = ['taobao.com']start_urls = ['https://www.taobao.com/markets/nanzhuang/2017new?']def parse(self, response):for it in response.xpath('//*[@id="sm-nav-2014"]/div[2]/div[2]/div/div[2]/dl'):for n in it.xpath('./dd'):try:li = n.xpath('./a/@href').extract()[0]except:passyield scrapy.Request(li,callback = self.parse_detail)#先只返回一个网页,爬的快了容易被封号def parse_detail(self,response):item = Taobao2Item()#使用re直接获取商品的价格,名称title = re.findall('"raw_title":"(.*?)"',response.text)price = re.findall('"view_price":"(.*?)"',response.text)#nid对获取评论有用nid = re.findall('"nid":"(.*?)"',response.text)for i in range(0,59):#分成60份,每一份中的价格和名称时对应的item['title']=title[i]item['price']=price[i]

这样我们就获取完商品的价格和名称了,接下来就差评论了
方案一、用selenium在详情页获取
(我没用这个方向,所以只说一下我的想法)
通过使用cookie进入url
url=https://item.taobao.com/item.htm?id=[刚刚获取的nid]&ns=1&abbucket=16
然后
driver.find_element_by_class_name(‘tb-tab-anchor’).click()
获取class_name=tb-rev-item的评论内容
方案二、寻找到获取评论的接口进行获取
进入商品详情页,点开评论详情,复制一条评论后在network中查找

但是当你直接点开这个对应的网址之后会发现你回到了我的淘宝页面
于是看它的header,发现和正常网页相比多了个Parameter的东西
此时再看它的网页,会发现第一个问号之后的内容都来自parameter
由此可以得出一个可能的结论,所有评论都来自https://rate.taobao.com/feedRateList.htm?,只是每次访问时携带的parameter不同导致返回的结果不同。对此修改我们的爬虫文件
只展示增加的代码

url="https://rate.tmall.com/list_detail_rate.htm"header={"cookie":你的cookie内容,"referer":"https://detail.tmall.com/item.htm","user-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 UBrowser/6.2.4098.3 Safari/537.37",}params={                                #必带信息"itemId":"",            #商品id  "sellerId":"50010158","currentPage":"1",          #页码"order" : "1",                  "callback":"jsonp2359",}params['itemId']=nid[i]pinglun=[]#fro it in range(1,1):#            #选择爬取的评论页数范围it=1            #但是爬多了或者快了就会被封号,如果没有对应的cookie池的话还是老实点吧if (it):params['currentPage']=str(it)req=requests.get(url,params,headers=header).content.decode('utf-8')[12:-1];     #解码,并且去除str中影响json转换的字符(\n\rjsonp(...));result=json.loads(req);pl=re.findall(r'rateContent\': \'(.*?)\'',str(result))print(pl)pinglun.append(pl)print (pinglun)item['nid']=pingluntime.sleep(0.7)       #封号太狠,又没有cookie池,只能慢慢来yield item
#别忘了import time
#import json
#import requests

接着尝试运行一边同时存储结果

scrapy crawl nanzhuang -o result.csv

正常(cookie也没过期)的话运行结果应该是这样的

这样的话在用cookie的情况下已经能完成爬取了,剩下的就是如何限制爬取速度防止一直被封。
我的思路一个个小项爬取(爬取完一个再爬取下一个),将所有小项的网址存入一个列表,每次返回的网址为列表[0],同时使用meta传参,每次解析时删去列表[0],如此反复

(二)、进行模拟登陆和获取cookie

思路:1、使用selenium + chromedriver进行登录,方案一、破解webdriver使用demo(但是我并不会)附上原博链接:https://blog.csdn.net/taojian_/article/details/97758632
方案二、反复横跳,通过在淘宝,微博,淘宝直接跳跃,选取最薄弱的微博登录进行突破(也是我采用的方法)
2、使用其他插件或第三方库如pyppeteer等通过淘宝的验证

具体实施:selenium操作,,不用详细说了吧,你咋用微博快速登陆登录淘宝,selenium就咋来(但是微博账号和淘宝账号需要绑定,还有解除掉安全锁,这些在实施过程中自己操作就好,与爬虫关系不大)
好吧,我就是犯懒了,先贴代码为敬,细节写在后面了


from selenium import webdriver
from selenium.webdriver import ChromeOptions
import json
import time
import requests
from PIL import Image
import pytesseract
from io import BytesIOdef yanzhengma(url):#识别验证码r = requests.get(url, headers=headers) #请求验证码图片链接im = Image.open(BytesIO(r.content))   #直接读取bytes数据,生成图片对象width, height = im.size#获取图片中的颜色,返回列表[(counts, color)...]color_info = im.getcolors(width*height)sort_color = sorted(color_info, key=lambda x: x[0], reverse=True)#将背景全部改为白色, 提取出字,每张图片一个字char_dict = {}for i in range(1, 6):start_x = 0im2 = Image.new('RGB', im.size, (255, 255, 255))for x in range(im.size[0]):for y in range(im.size[1]):if im.getpixel((x, y)) == sort_color[i][1]:im2.putpixel((x, y), (0, 0, 0))if not start_x:start_x = x  #标记每个字符的起始位置,用于最后字符串的排序else:im2.putpixel((x, y), (255, 255, 255))char = pytesseract.image_to_string(im2,config='--psm 10')char_dict[start_x] = charcode = ''.join([item[1] for item in sorted(char_dict.items(), key=lambda i:i[0])])return codeheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
b = webdriver.Chrome(options=option)
b.get('https://login.taobao.com/member/login.jhtml')b.find_element_by_class_name("weibo-login").click()
#转到微博登录界面
b.find_element_by_name('username').send_keys('yourid')#输入你的微博账号
b.find_element_by_name('password').send_keys('yourpassword')#输入你的微博密码
b.find_element_by_class_name('W_btn_g').click()#登录按钮
while (b.find_element_by_class_name('code').get_attribute('href')!='javascript:void(0);'):#如果出现验证码,使用tesseract进行尝试print(b.find_element_by_class_name('W_btn_g'))imgurl=b.find_element_by_class_name('code').get_attribute('href')aun = yanzhengma(imgurl)b.find_element_by_name('verifycode').send_keys(aun)b.find_element_by_class_name('W_btn_g').click()#如果实在过不去就手动输入验证码吧#time.sleep(10)
time.sleep(4)
#等他跳转到淘宝页面
cookie = b.get_cookies()
#获取当前页面的cookie
jsonCookies = json.dumps(cookie)
with open('taobaocookie.json', 'w') as f:f.write(jsonCookies)
if (cookie):print('cookie获取成功')b.quit()
细节1:selenium中使用xpath进行定位会很不方便,有的位置 ,,,好像会变化,而且有的密码框好像选中不了。所以建议使用css_selector,id,class_name进行定位。
细节2:即使是微博登录时不时也会跳出验证码,这时就需要使用tesseract+pytesseract进行验证码识别,通过训练后识别正确率还能提升,具体内容csdn上一堆,但是!!!版本不一定时对应的,所以我训练后发现根本用不了,只能用默认的eng文件。
细节3:从微博界面跳到淘宝界面是有一定时间的,立刻获取cookie的话,可能会得到微博的cookie,所以要根据自己的网速大概time.sleep(一段时间)
细节4:。。这个是外部因素,在下载部分第三方库是可能会timeout,所以可能需要比较科学的上网。
细节5:即使我们尽可能的减慢了速度,但是爬虫就是爬虫,是不被阿里认可的,所以被识别然后封号(自己人工上淘宝肯定还是可以的)的可能性还是很大。
细节6:发现了么,我给的代码不完整,给了获取cookie,但是获取完的cookie是json格式的,不能直接使用。(没给提取cookie,不可能总是复制粘贴吧,那还不如手动登录)
cookie=''
with open('taobaocookie.json','r',encoding='utf-8') as f:listCookies=json.loads(f.read())
cookie = [item["name"] + "=" + item["value"] for item in listCookies]
cookiestr = '; '.join(item for item in cookie)
#最后的这个cookiestr就是能直接用到爬虫文件中的字符串了

scrapy淘宝爬虫(通过模拟登录获取cookie)获取价格信息评论相关推荐

  1. php 模拟登录淘宝taobao阿里妈妈|模拟登录淘宝联盟|curl模拟登录淘宝|模拟登陆淘宝采集数据

    php 模拟登录淘宝taobao阿里妈妈|模拟登录淘宝联盟|curl模拟登录淘宝|模拟登陆淘宝采集数据 在很多项目中我们可能要采集淘宝会员中心的一些数据.但是程序采集的时候会员中心必须是登录的,这里我 ...

  2. 淘宝爬虫之强行登录如何解决Selenium被检测到的问题?

    近遇上一些反Selenium爬虫的情况,爬虫都会碰到某些网站刚刚打开页面就被判定为:非人类行为. 因为不少大网站有对selenium的js监测机制.比如navigator.webdriver,navi ...

  3. Python3 网络爬虫:模拟登录淘宝,清空女朋友的购物车!

    前言 文字.图片.视频这类常规的内容下载.API 的使用,这些操作对你来说,应该轻而易举了. 那今天,就讲解一下高级一点的技能,「模拟登录」. 值此 618 之际,帮他/她清空一波购物车! 2 模拟登 ...

  4. python淘宝爬虫登陆功能和下单功能_Python 爬虫实战5 模拟登录淘宝并获取所有订单...

    经过多次尝试,模拟登录淘宝终于成功了,实在是不容易,淘宝的登录加密和验证太复杂了,煞费苦心,在此写出来和大家一起分享,希望大家支持. 本篇内容 python模拟登录淘宝网页 获取登录用户的所有订单详情 ...

  5. selenium淘宝爬虫

    selenium淘宝爬虫 使用selenium做淘宝商品爬虫 1.准备工作 2.页面分析 3.代码实现 3-1.模拟登陆 3-2.商品列表页 3-3.获取商品信息 3-4.数据库设计 3-5.爬虫执行 ...

  6. selenium实现淘宝爬虫

    准备工作 安装好selenium和浏览器驱动chromedriver. 淘宝爬虫过程分析加代码 1.页面请求分析 首先请求淘宝页面,然后输入要爬取的数据的关键词,没有登陆,此时会弹出登陆的窗口,采取模 ...

  7. 淘宝爬虫、数据分析、童装

    淘宝爬虫.数据分析.童装 requests爬虫 数据处理 数据预处理 处理缺失值 处理sales列 处理location列 保存csv 数据分析 title 词云可视化 关键词的销量分析 店名 价格. ...

  8. 爬虫项目四:2021最新测试可用淘宝爬虫

    文章目录 前言 一.mitmdump配置 二.登陆淘宝 三.解析数据 总结 前言 众所周知淘宝的反爬机制是越来越严格,如果用单纯的用selenium登录淘宝会出现万恶的滑块验证,这是因为淘宝检测出你是 ...

  9. python爬虫笔记(六)网络爬虫之实战(1)——淘宝商品比价定向爬虫(解决淘宝爬虫限制:使用cookies)...

    1.  淘宝商品信息定向爬虫 链接: https://www.taobao.com/ 2. 实例编写 2.1 整体框架 # -*- coding: utf-8 -*-import requests i ...

最新文章

  1. java ado_Java进击C#——语法之ADO.NET
  2. 结对编程-四则运算生成程序-GUI界面
  3. linux cenots 查看cpu核数
  4. 自定义函数或者回调函数中调用对话框对象
  5. ECCV 2020 Spotlight 谷歌论文大盘点
  6. 微信小程序自定义组件4 —— 代码共享behaviors
  7. 计算机标准化管理制度,计算机中心标准化管理.doc
  8. 异常日志处理-ThrowsAdvice
  9. 查看Ubuntu内核和版本的两条命令以及LTS的含义
  10. 【杂谈】我学习这么好,为什么找不到工作?
  11. SQL Server 2017 AlwaysOn AG 自动初始化(九)
  12. Fluent批处理及.jou和.scm文件编写的相关操作
  13. 一款强大的反编译工具luyten
  14. 电力电子仿真软件---PLECS
  15. 八段数码管数字显示实验c语言,实验报告__实验七_八段数码管显示实验
  16. 项目1在线交流平台-7.构建安全高效的企业服务-5.redis高级数据结构应用-统计网站数据-独立访客和日活跃用户
  17. CVE-2018-1273漏洞复现
  18. 倒计时1天,六位专家周末带你解锁前端研发新姿势
  19. RTSP协议网络摄像头互联网无插件直播EasyNVR+EasyNVS,如何保持配置地址一致?
  20. java wtc_java通过wtc调用tuxedo服务超时

热门文章

  1. 【Spring Boot】@NotEmpty注解缺失
  2. 解决word中标题无法升级或降级的问题
  3. 向前欧拉公式 matlab_6R机械臂动力学方程线性化-牛顿-欧拉方式
  4. vscode之python框架flask 断点调试的配置(官方推荐的配置,务必注意端口)
  5. 现在淘宝虚拟商品自动发货程序还有人做吗?
  6. ArcBlock ③ 月报 | ABT 钱包 2.5 版更新发布
  7. 微信小程序 wx:for/if/elif/else等循环的写法以及wx.key的运用
  8. phpstud使用教程_phpstudy使用说明
  9. 树莓派mysql安装失败- 解决方案
  10. 智能技术发展迅速,嵌入式系统迎来市场新需