抓取手机app的数据
爬虫是CS中c端,原理是模拟浏览器向服务器发送请求,如果要爬手机APP的数据原理相同,APP也是客户端与浏览器性质相同。我们只要能获取到手机APP给服务器发送的数据,并加以分析就能模拟它的请求从而获取到数据
在app和服务器之间设置一个代理服务器
1. app的请求先发给代理服务器
2. 代理服务器把请求转发给真实服务器
3. 真实服务器返回数据给代理服务器
4. 代理服务器将数据返回给app客户端
1. charles 代理服务器
2. postman 模拟请求的工具
1. 安装charles并启动,安装完成后即可代理windows的请求可以抓取windows软件的请求数据
2. 让手机与charles所在的电脑处于同一局域网
3. 将手机的代理服务器设置为charles
4. 如果要获取HTTPS请求,需要安装证书
(1)安装服务器证书
help -> SSL Proxying -> install Charles Root Certificate
需要安装在受信任的颁发机构中
(2)安装手机证书
help -> SSL Proxying -> install Charles Root Certificate on a Mobile Device or Remote Browser
手机访问提示的地址,安装证书
Proxy -> SSL Proxying Settings -> 设置Host*和Port443
设置允许所有的443的端口访问,因为https访问的端口号是443

Scrapy框架
安装
1. pip3 install wheel
2. pip3 install lxml
3. pip3 install pyopenssl
4. pip3 install pywin32
5. 下载twisted的wheel文件 https://www.lfd.uci.edu/~gohlke/pythonlibs/
6. pip3 install C:\Users\Administrator\Desktop\Twisted-19.2.0-cp36-cp36m-win_amd64.whl
7. pip3 install scrapy
常用命令
scrapy -h
scrapy <command> -h
Global commands:
startproject
scrapy startproject jd
genspider
scrapy genspider JD www.jd.com
settings
scrapy settings --get BOT_NAME
runspider
scrapy runspider amzon.py
shell
scrapy shell www.taobao.com
fetch
scrapy fetch --nolog http://www.baidu.com 不输出日志
scrapy fetch --nolog --header http://www.baidu.com 不输出日志 只查看头信息
view
scrapy view http://www.baidu.com
version
scrapy version -v
Project-only commands:
crawl
scrapy crawl amzon
check
scrapy check
list
scrapy list
edit
parse
bench
https://docs.scrapy.org/en/latest/topics/commands.html
目录结构
project_name/
scrapy.cfg
project_name/
__init__.py
items.py
pipelines.py
settings.py
spiders/
__init__.py
爬虫1.py
爬虫2.py
爬虫3.py
文件说明:
scrapy.cfg 项目的主配置信息,用来部署scrapy时使用,爬虫相关的配置信息在settings.py文件中。
items.py 设置数据存储模板,用于结构化数据,如:Django的Model
pipelines 数据处理行为,如:一般结构化的数据持久化
settings.py 配置文件,如:递归的层数、并发数,延迟下载等。强调:配置文件的选项必须大写否则视为无效,正确写法USER_AGENT='xxxx'
spiders 爬虫目录,如:创建文件,编写爬虫规则
注意:一般创建爬虫文件时,以网站域名命名
pycharm中运行爬虫
在项目目录下新建entrypoint.py
import scrapy.cmdline
scrapy.cmdline.execute(["scrapy","crawl","JD"])
自定义去重规则
================================my_filters.py==================
mport json
from scrapy.dupefilters import RFPDupeFilter
class MyFilter(RFPDupeFilter):
def request_seen(self, request):
print("yoyoyoooooyo")
with open(r"D:\Program Files\Python\zdc\jd\jd\seens\myseens","rt") as f:
ls = json.load(f)
if request.url in ls:
return True
else:
ls.append(request.url)
with open(r"D:\Program Files\Python\zdc\jd\jd\seens\myseens", "rt") as f:
json.dump(ls,f)
return False
-----------------setting.py-------------------
ROBOTSTXT_OBEY = False
DUPEFILTER_CLASS ='jd.my_filters.MyFilter'
DUPEFILTER_DEBUG = False
JOBDIR = r"D:\Program Files\Python\zdc\jd\jd\seens"