Scrapy爬取淘宝网数据的尝试
因为想学习数据库,想要获取较大量的数据,第一个想到的自然就是淘宝。。。。其中有大量的商品信息,淘宝网反爬措施还是比较多,特别是详情页面还有恶心的动态内容
该例子中使用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爬取淘宝网数据的尝试相关推荐
- python爬淘宝app数据_一篇文章教会你用Python爬取淘宝评论数据(写在记事本)
[一.项目简介] 本文主要目标是采集淘宝的评价,找出客户所需要的功能.统计客户评价上面夸哪个功能多,比如防水,容量大,好看等等. [二.项目准备工作] 准备Pycharm,下载安装等,可以参考这篇文章 ...
- python 爬取淘宝网课
python爬取淘宝网课,打开web控制台,发现有个链接可以下载到对应的内容,下载的格式是m3u8,用文本打开里面是许多.ts链接,当然百度后得知可以直接下个vlc然后下载,但是还是想用python试 ...
- 爬取淘宝手机数据,并进行清洗,并可视化展示
爬取所需环境 selnium安装 Win+R输入cmd敲回车进入到cmd窗口: 输入"pip3 install selenium -i https://pypi.tuna.tsinghua. ...
- 用Python爬取淘宝网商品信息
用Python爬取淘宝网商品信息 转载请注明出处 网购时经常会用到淘宝网 点我去淘宝但淘宝网上的商品琳琅满目,于是我参照中国大学 MOOC的代码写了一个爬取淘宝网商品信息的程序 代码如下: impor ...
- 使用Appium爬取淘宝App数据
0x01.介绍说明 1.简介 Appium是一个自动化测试开源工具.通过WebDriver协议驱动IOS.Android.Windows Phone平台上的原生应用.混合应用和web应用. 2.App ...
- Python爬虫实战(5)-爬取淘宝网服装图片(Selenium+Firefox)
前言 今天我们巩固一下前面学过的知识,通过Selenium+Firefox实现模拟浏览器并自动翻页,爬取图片并写入本地文件中. 以搜索"女装"为例,自动爬取"女装&quo ...
- Python3爬取淘宝网商品数据!
分析淘宝网 这次选择的是淘宝网热卖而不是淘宝网,二者虽然名字有不同,但是数据还是一样的,区别就在于前者把后者的所有店铺和商品的海量数据按照销售量.好评度.信誉度综合测评.重新计算.重新排序展现给买家的 ...
- 爬虫(2)之re 爬取淘宝网
我们通过requests可以很轻松地就获得网页上的所有内容,但是这些内容往往会夹杂着许多我们不需要的东西,因此我们需要解析和提取 HTML 数据. 在先前介绍过的解析和提取html内容的库,只能够处理 ...
- python +selenium 爬取淘宝网商品信息
前几天用python爬取豆瓣关于电影<长城>的影评,发现豆瓣的网页是静态的,心中一阵窃喜.以为对于动态网页了解的不是太多.但是主要是用cookie加headers爬取的.效果还不错,爬取了 ...
- 【python爬虫】爬取淘宝网商品信息
相信学了python爬虫,很多人都想爬取一些数据量比较大的网站,淘宝网就是一个很好的目标,其数据量大,而且种类繁多,而且难度不是很大,很适合初级学者进行爬取.下面是整个爬取过程: 第一步:构建访问的u ...
最新文章
- VoxelNet阅读笔记
- oracle 10g rac重建crs
- HNOI2012永无乡
- python将列表横着输出来
- 把对象转换成JSON字符串 第二稿支持移动设备
- java三个环境变量_java基础(一):我对java的三个环境变量的简单理解和配置
- JDBC批量Insert深度优化(有事务)
- Python Pytest装饰器@pytest.mark.parametrize多样参数化(二)
- hadoop示例源码位置
- mysql常用的yu语句_mysql常用sql语句
- Android启动模式分析
- 数学之美--读书笔记
- Wangle源码分析:ClientBootstrap
- Thingworx笔记-创建菜单
- uint8_t图像数据类型介绍
- 成长感悟:谁定义了你的大学生活
- 一瓶OTC,药店被罚10万,原因是...
- stc8a控制MG90S舵机
- OpenCV3实现图像拼接融合
- 鲁大师2022年半年报公布,九号获得最智能电动车品牌
热门文章
- ubuntu 安装 notepad++
- 如何通过W3school学习JS/如何使用W3school的JS参考手册
- 3dmax顶点动画导入unity_怎么把3DMax中的模型动画导入unity
- 谷歌Chrome繁体字乱码问题
- MyBatis文档观后整理
- 【必修】人工智能原理 学习笔记(二)chapter 2 产生式系统
- 令你的网站获得任意Google PR值的方法!
- PF粒子滤波算法理解
- 三个比较经典的策略: Dual Thrust、R-Breaker、Dynamic Breakout II
- 十大经典策略之一 - Dual Thrust策略(期货)