没事想爬下数据,就入了scrapy坑,跟着https://zhuanlan.zhihu.com/data-factory这篇教程走,中间被小数量的网站坑过,不过还是写出了爬虫~~

  切糕王子:毫无防御,直接scan就可以了;

  尚妆网:进这个网站时才发现,这和说好的不一样!!!这个网站也是采用了拖动到底才加载,不过貌似不能拖到底,要移到稍微上面才能加载?不过那个教程说的根据探查到的url找出规律,再伪装参数这点还是有用的

  批量爬取商品url代码(只有ShowjoySpider):

# -*- coding: utf-8 -*-
import time
import sys
import random
reload(sys)
sys.setdefaultencoding("utf-8")
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from tutorial.items import TutorialItem
from scrapy.http.request import Request
import re class ShowjoySpider(BaseSpider):
name = "Showjoy"
allowed_domains = ["showjoy.com"]
start_urls = [
"http://list.m.showjoy.com/search/?q=cateIds%3A1,cateName%3A%E5%A5%97%E8%A3%85&stock=1"
] # to keep the login status
cookies = {} # pretend to visit page by computer/smart phone
headers = {
'Connection': 'keep - alive',
'User-Agent': 'Mozilla/5.0 (Android 4.4; Mobile; rv:41.0) Gecko/41.0 Firefox/41.0'
# 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'
} # to solve the response
meta = {
'dont_redirect': False, # don't ban the redirect
'handle_httpstatus_list': [301, 302] # solve the exception
} def toFile(self, str, fileName):
file = open(fileName, "a")
file.write(str)
file.write('\n')
file.close() def start_requests(self):
"""
override function
"""
yield Request(self.start_urls[0], callback=self.parse, headers=self.headers, cookies=self.cookies, meta=self.meta) def parse(self, response):
print 'analyse starting'
body = response.body
linklist = re.findall(r'http://item.m.showjoy.com/sku/[0-9]+.html',body)
# token = sele.select('//input[@name="_synToken"]/@value').extract()[0]
print 'len=' + str(len(linklist))
if(len(linklist) == 0):
return
# print 'token=' + str(token)
self.toFile(str(linklist), "urlList.txt")
newurl = self.start_urls[0] + '&page='
exresult = re.search(r'page=(\d+)',response.url)
if(exresult == None):
print 'page 2'
# newurl += '2&_synToken=' + str(token)
newurl += ''
else:
print 'page n'
newpagenum = int(exresult.group(1)) + 1
# newurl += str(newpagenum) + '&_synToken=' + str(token)
newurl += str(newpagenum)
time.sleep(1)
yield Request(newurl, callback=self.parse, headers=self.headers, cookies=self.cookies, meta=self.meta)

  Taobao/Tmall:其实用PhantomJS就可以比较容易搞定,但是个人觉得这样爬取速度偏慢,想了下决定挑战抓包,结果就被乱且杂的js文件击坠了。。。

  首先为了方便抓数据,user-agent设定为Mozilla/5.0 (Android 4.4; Mobile; rv:41.0) Gecko/41.0 Firefox/41.0(让网站以为我们是手机,返回小个网站,不过蛋疼的是某些地方点击没反应,要引用selenium.webdriver.common.touch_actions)

  

  进入搜索界面,输入“acm-icpc”到框里出来一堆商品^ ^,查看代码,卧槽有两种url,进去也是不同的代码结构(天猫和淘宝主站不同结构,有你的)。嗯,分别解析代码结构吧

(注意用手机网页端的话,天猫页面可能会被下载app提示覆盖,用touch_actions去tap对应class按钮再爬)

  一开始的商品信息直接爬了也没关系,没有异步加载的数据,只是销量、价格和地区一定要手动到页面大约第380行,json那里找数据。

 

  标题显式标在html页面,价格(52.93)、月销量(48)和地区(山东青岛)是在下方的json字符串里找到的orz

  商品评论那里抓包比较容易,下面3个包查看内容就知道分别什么内容了(进入评论界面前,请clear之前抓的包)

  

  评论url格式比较标准,https://rate.tmall.com/list_detail_rate.htm?itemId=529090856192&sellerId=741719789&order=3&append=0&content=0&currentPage=1&pageSize=10&tagId=&_ksTS=1500373894842_492&callback=jsonp493

  itemId和sellerId在爬下来的源代码那里就有,除了_ksTS和callback其他的参数直接粘贴,问题就在于不知道如何确定那2个参数

  查看那条url右边的js文件,查找“_ksTS”发现是d.now()+d.guid(),查了下,知道那是淘宝kissy框架的东西,now()根据new Date().getTime(),guid()是唯一标识符,python好像也支持new Date(),但是返回的参数跟js的差好远,要不使用phantomJS完成url拼接抓包是不可能了。。。

  再看商品详情

  特码全是图片,而且url也被层层js覆盖起来了

  

  

  (就是说,商品详情必须用phantomJS爬)

python爬虫——论抓包的正确姿势和学好Javascript的重要性(1)的更多相关文章

  1. 剖析和解决Python中网络粘包的正确姿势

    目录 1.粘包及其成因 1.1.粘包产生 1.2.粘包产生的原因 2.尝试解决粘包 2.1.指定数据包的长度 2.2.固定数据包的长度 2.3.用函数实现多次调用发送数据 3.解决粘包问题的正确姿势 ...

  2. python编写网络抓包分析脚本

    python编写网络抓包分析脚本 写网络抓包分析脚本,一个称手的sniffer工具是必不可少的,我习惯用Ethereal,简单,易用,基于winpcap的一个开源的软件 Ethereal自带许多协议的 ...

  3. python+pcap+dpkt 抓包小实例

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ 网络数据包捕获与分析程序 """ imp ...

  4. Python爬虫实战---抓取图书馆借阅信息

    Python爬虫实战---抓取图书馆借阅信息 原创作品,引用请表明出处:Python爬虫实战---抓取图书馆借阅信息 前段时间在图书馆借了很多书,借得多了就容易忘记每本书的应还日期,老是担心自己会违约 ...

  5. Python创建二维列表的正确姿势

    Python创建二维列表的正确姿势 简介 Python中没有数组,使用list结构代替,并且list结构的功能更加强大: 支持动态扩容,无需担心元素过量 对list内的元素类型不做一致性约束 提供丰富 ...

  6. 【转】Python爬虫:抓取新浪新闻数据

    案例一 抓取对象: 新浪国内新闻(http://news.sina.com.cn/china/),该列表中的标题名称.时间.链接. 完整代码: from bs4 import BeautifulSou ...

  7. Python爬虫:抓取新浪新闻数据

    案例一 抓取对象: 新浪国内新闻(http://news.sina.com.cn/china/),该列表中的标题名称.时间.链接. 完整代码: from bs4 import BeautifulSou ...

  8. 爬虫——控制台抓包和requests.post()发送请求

    控制台抓包 打开方式及常用选项 1.打开浏览器,F12打开控制台,找到Network选项卡 2.控制台常用选项 1.Network: 抓取网络数据包 1.ALL: 抓取所有的网络数据包 2.XHR:抓 ...

  9. python tcp 实时抓包

    问题:之前我们系统上线后,因为是旧的系统,没有加统计的功能,比如用户喜欢那个页面,是哪些用户再访问,接口的负载能力等等. 解决办法:1,现有代码更改,添加功能.现有代码侵入太多,工作量比较大 2,想到 ...

随机推荐

  1. python数据分析及展示(二)

    一.Matplotlib库入门 1. Matplotlib库的介绍 http://matplotlib.org/gallery.html可查看Matplotlib库的效果 Matplotlib库由各种 ...

  2. a排兵布阵

    来源hdu1166 C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵 ...

  3. Gym 101810

    友情提示: 这篇题解并没有GJKL,因为我也不会,而且看别人代码也看不懂,而且问学长还不给我讲!hmc:这个题巨麻烦,我只能说balabala.我不学了我退役了啊! A:这傻逼题我从开头wa了四个小时 ...

  4. JAVA课后作业01

    一.关于枚举的问题 public class EnumTest { public static void main(String[] args) { Size s=Size.SMALL; Size t ...

  5. 27.用webpack自搭react和vue框架

    自己搭建react-app vue-cli 前置条件 cnpm i -D webpack webpack-cli webpack-dev-server cnpm i -D css-loader sty ...

  6. vb中的sortedList和java中的

    vb中sortedList集合了数组和散列表的特征,可以像数组,ArrayList等索引获取值,也可以像hashtable,hashmap等散列表通过键值对获取值

  7. Tensorflow 的saved_model模块学习

    saved_model模块主要用于TensorFlow Serving.TF Serving是一个将训练好的模型部署至生产环境的系统,主要的优点在于可以保持Server端与API不变的情况下,部署新的 ...

  8. GIS常用知识列举

    GIS知识分类 我认为GIS知识,大体可分为以下三类. G——测量学.地图学.误差理论等基础——测绘方面 I——数据库.开发——IS方面 S——GIS原理——结合前面两种知识的理念 第一类,是基础,有 ...

  9. IE浏览器Web自动化

    一.常见问题 1.1  在IE11浏览器下运行自动化脚本特别缓慢. 具体表现:(64位IE驱动器下)脚本运行慢,尤其是文本框输入,其它浏览器是一起输入,但IE是单个字节输入字符串 解决方法:更换IE的 ...

  10. varnish缓存系统基础知识

    缓存系统类型 1.页面缓存/pageCache     缓存静态资源(html js css image)  例如:varnish    squid 2.数据缓存/dataCache      缓存应 ...