Python爬虫-Scrapy框架

文章目录

        • 抓取手机app的数据
      • Scrapy框架
        • 安装
        • 常用命令
        • 目录结构
        • pycharm中运行爬虫
        • 自定义去重规则

抓取手机app的数据

爬虫是CS中c端,原理是模拟浏览器向服务器发送请求,如果要爬手机APP的数据原理相同,APP也是客户端与浏览器性质相同。我们只要能获取到手机APP给服务器发送的数据,并加以分析就能模拟它的请求从而获取到数据

# 实现思路
在app和服务器之间设置一个代理服务器
1. app的请求先发给代理服务器
2. 代理服务器把请求转发给真实服务器
3. 真实服务器返回数据给代理服务器
4. 代理服务器将数据返回给app客户端

# 需要的工具软件
1. charles    代理服务器
2. postman    模拟请求的工具

# 手机app的爬取流程
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

Python爬虫-Scrapy框架_第1张图片

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/#twisted
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
    
#2 有两种命令:其中Project-only必须切到项目文件夹下才能执行,而Global的命令则不需要
	Global commands:
        startproject #创建项目
        	scrapy startproject jd
        genspider    #创建爬虫程序  指定名称 限制爬取的网址
        	scrapy genspider JD www.jd.com
        settings     #如果是在项目目录下,则得到的是该项目的配置
        	scrapy settings --get BOT_NAME
        runspider    #运行一个独立的python文件,不必创建项目
        	scrapy runspider amzon.py
        shell        #scrapy shell url地址  在交互式调试,如选择器规则正确与否
        	scrapy shell www.taobao.com
        fetch        #单纯地爬取一个页面,不打开浏览器,可以拿到请求头
        	 scrapy fetch --nolog http://www.baidu.com 不输出日志
             scrapy fetch --nolog --header http://www.baidu.com 不输出日志  只查看头信息
        view         #下载完毕后直接弹出浏览器,以此可以分辨出哪些数据是ajax请求
        	scrapy view http://www.baidu.com
        version      #scrapy version 查看scrapy的版本,scrapy version -v查看scrapy依赖库的版本
        	scrapy version -v
            
            
    Project-only commands:
		#必须先切换到对应的目录才能执行
        crawl        #运行爬虫,必须创建项目才行,确保配置文件中ROBOTSTXT_OBEY = False
        	scrapy crawl amzon
        check        #检测项目中有无语法错误
        	scrapy check
        list         #列出项目中所包含的爬虫名
        	scrapy list
        edit         #编辑器,一般不用
        parse        #scrapy parse url地址 --callback 回调函数  #以此可以验证我们的回调函数是否正确
        bench        #scrapy bentch压力测试
		
#3 官网链接
    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")
        # 读取json文件如果存在则返回True,否则返回false
        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"  # 最终路径为

你可能感兴趣的:(Python爬虫)