因为想学习数据库,想要获取较大量的数据,第一个想到的自然就是淘宝。。。。其中有大量的商品信息,淘宝网反爬措施还是比较多,特别是详情页面还有恶心的动态内容

该例子中使用Scrapy框架中的基础爬虫(CrawlSpider还有点没搞清楚= = b)

先贴上整体代码

import scrapy
import re
import csv
import pymongo
from tmail.items import TmailItem
class WeisuenSpider(scrapy.Spider):name = 'weisuen'start_url = 'https://s.taobao.com/search?q=%E5%B8%BD%E5%AD%90&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.50862.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170817&s=300'detail_urls=[]data=[]client=pymongo.MongoClient("localhost",27017)db=client.taobaodb=db.itemsdef start_requests(self):for i in range(30):#爬31页数据差不多了url=self.start_url+'&s='+str(i*44)yield scrapy.FormRequest(url=url,callback=self.parse)def url_decode(self,temp):while '\\' in temp:index=temp.find('\\')st=temp[index:index+7]temp=temp.replace(st,'')index=temp.find('id')temp=temp[:index+2]+'='+temp[index+2:]index=temp.find('ns')temp=temp[:index]+'&'+'ns='+temp[index+2:]index=temp.find('abbucket')temp='https:'+temp[:index]+'&'+'abbucket='+temp[index+8:]return tempdef parse(self, response):item=response.xpath('//script/text()').extract()pat='"raw_title":"(.*?)","pic_url".*?,"detail_url":"(.*?)","view_price":"(.*?)"'urls=re.findall(pat,str(item))urls.pop(0)row={}.fromkeys(['name','price','link'])for url in urls:#解析url并放入数组中weburl=self.url_decode(temp=url[1])item=TmailItem()item['name']=url[0]item['link']=weburlitem['price']=url[2]row['name']=item['name']row['price']=item['price']row['link']=item['link']self.db.insert(row)row={}.fromkeys(['name','price','link'])self.detail_urls.append(weburl)self.data.append(item)return itemfor item in self.detail_urls:#这个可以抓取评论等更多相关信息yield scrapy.FormRequest(url=item,callback=self.detail)def detail(self,response):print(response.url)#首先判断url来自天猫还是淘宝if 'tmall' in str(response.url):passelse:pass

items.py中定义3个属性:name,price,link

起始网页为淘宝的搜索地址,关键字我设置为“帽子”,当然修改关键字就只需要修改一下url中的q=后面的值就可以了

因为该类型商品信息量很大,有很多页所以重写start_requests(self)方法,获取前31页的内容

首先

name = 'weisuen'start_url = 'https://s.taobao.com/search?q=%E5%B8%BD%E5%AD%90&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.50862.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170817&s=300'detail_urls=[]data=[]client=pymongo.MongoClient("localhost",27017)db=client.taobaodb=db.items

先在定义中打开mongodb数据库 当然我最初使用txt文本和CSV文件看结果,成功后再使用数据库

def start_requests(self):for i in range(30):#爬31页数据差不多了url=self.start_url+'&s='+str(i*44)yield scrapy.FormRequest(url=url,callback=self.parse)

通过观察发现页数由url后的s=xx决定 且这个值等于页数*44

def parse(self, response):item=response.xpath('//script/text()').extract()pat='"raw_title":"(.*?)","pic_url".*?,"detail_url":"(.*?)","view_price":"(.*?)"'urls=re.findall(pat,str(item))urls.pop(0)row={}.fromkeys(['name','price','link'])for url in urls:#解析url并放入数组中weburl=self.url_decode(temp=url[1])item=TmailItem()item['name']=url[0]item['link']=weburlitem['price']=url[2]row['name']=item['name']row['price']=item['price']row['link']=item['link']self.db.insert(row)row={}.fromkeys(['name','price','link'])self.detail_urls.append(weburl)self.data.append(item)return itemfor item in self.detail_urls:#这个可以抓取评论等更多相关信息yield scrapy.FormRequest(url=item,callback=self.detail)

在回调函数中对获取的网页数据进行解析,这里遇到的麻烦就是response.text会报错‘GBK xxxxx’因为淘宝网页不仅仅由UTF-8编码还有其他编码格式所以这样解码就会出现问题,我这里采取的是先使用xpath获取所有相关类容,再使用正则表达式对相关信息进行提取。其中每件商品的url都有动态类容需要去掉,这个使用了一个url_decode()方法去掉其中的动态类容。解码方法代码如下:

def url_decode(self,temp):while '\\' in temp:index=temp.find('\\')st=temp[index:index+7]temp=temp.replace(st,'')index=temp.find('id')temp=temp[:index+2]+'='+temp[index+2:]index=temp.find('ns')temp=temp[:index]+'&'+'ns='+temp[index+2:]index=temp.find('abbucket')temp='https:'+temp[:index]+'&'+'abbucket='+temp[index+8:]return temp

最后返回的url是可以直接打开的,在回调函数parse中将相关类容写入了数据库中,为了便于扩展,parse中生成了对于详情页面的请求,可以之后进行评论,评分等相关信息的抓取

数据库内容:

之前生成的CSV文件

Scrapy爬取淘宝网数据的尝试相关推荐

  1. python爬淘宝app数据_一篇文章教会你用Python爬取淘宝评论数据(写在记事本)

    [一.项目简介] 本文主要目标是采集淘宝的评价,找出客户所需要的功能.统计客户评价上面夸哪个功能多,比如防水,容量大,好看等等. [二.项目准备工作] 准备Pycharm,下载安装等,可以参考这篇文章 ...

  2. python 爬取淘宝网课

    python爬取淘宝网课,打开web控制台,发现有个链接可以下载到对应的内容,下载的格式是m3u8,用文本打开里面是许多.ts链接,当然百度后得知可以直接下个vlc然后下载,但是还是想用python试 ...

  3. 爬取淘宝手机数据,并进行清洗,并可视化展示

    爬取所需环境 selnium安装 Win+R输入cmd敲回车进入到cmd窗口: 输入"pip3 install selenium -i https://pypi.tuna.tsinghua. ...

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

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

  5. 使用Appium爬取淘宝App数据

    0x01.介绍说明 1.简介 Appium是一个自动化测试开源工具.通过WebDriver协议驱动IOS.Android.Windows Phone平台上的原生应用.混合应用和web应用. 2.App ...

  6. Python爬虫实战(5)-爬取淘宝网服装图片(Selenium+Firefox)

    前言 今天我们巩固一下前面学过的知识,通过Selenium+Firefox实现模拟浏览器并自动翻页,爬取图片并写入本地文件中. 以搜索"女装"为例,自动爬取"女装&quo ...

  7. Python3爬取淘宝网商品数据!

    分析淘宝网 这次选择的是淘宝网热卖而不是淘宝网,二者虽然名字有不同,但是数据还是一样的,区别就在于前者把后者的所有店铺和商品的海量数据按照销售量.好评度.信誉度综合测评.重新计算.重新排序展现给买家的 ...

  8. 爬虫(2)之re 爬取淘宝网

    我们通过requests可以很轻松地就获得网页上的所有内容,但是这些内容往往会夹杂着许多我们不需要的东西,因此我们需要解析和提取 HTML 数据. 在先前介绍过的解析和提取html内容的库,只能够处理 ...

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

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

  10. 【python爬虫】爬取淘宝网商品信息

    相信学了python爬虫,很多人都想爬取一些数据量比较大的网站,淘宝网就是一个很好的目标,其数据量大,而且种类繁多,而且难度不是很大,很适合初级学者进行爬取.下面是整个爬取过程: 第一步:构建访问的u ...

最新文章

  1. VoxelNet阅读笔记
  2. oracle 10g rac重建crs
  3. HNOI2012永无乡
  4. python将列表横着输出来
  5. 把对象转换成JSON字符串 第二稿支持移动设备
  6. java三个环境变量_java基础(一):我对java的三个环境变量的简单理解和配置
  7. JDBC批量Insert深度优化(有事务)
  8. Python Pytest装饰器@pytest.mark.parametrize多样参数化(二)
  9. hadoop示例源码位置
  10. mysql常用的yu语句_mysql常用sql语句
  11. Android启动模式分析
  12. 数学之美--读书笔记
  13. Wangle源码分析:ClientBootstrap
  14. Thingworx笔记-创建菜单
  15. uint8_t图像数据类型介绍
  16. 成长感悟:谁定义了你的大学生活
  17. 一瓶OTC,药店被罚10万,原因是...
  18. stc8a控制MG90S舵机
  19. OpenCV3实现图像拼接融合
  20. 鲁大师2022年半年报公布,九号获得最智能电动车品牌

热门文章

  1. ubuntu 安装 notepad++
  2. 如何通过W3school学习JS/如何使用W3school的JS参考手册
  3. 3dmax顶点动画导入unity_怎么把3DMax中的模型动画导入unity
  4. 谷歌Chrome繁体字乱码问题
  5. MyBatis文档观后整理
  6. 【必修】人工智能原理 学习笔记(二)chapter 2 产生式系统
  7. 令你的网站获得任意Google PR值的方法!
  8. PF粒子滤波算法理解
  9. 三个比较经典的策略: Dual Thrust、R-Breaker、Dynamic Breakout II
  10. 十大经典策略之一 - Dual Thrust策略(期货)