爬虫框架-Scrapy

Scrapy中文网站:https://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.html#intro-tutorial

Scrapy

  1. 创建项目, 执行如下命令:
    scrapy startproject renren
  2. 创建普通爬虫 cd renren:
scrapy genspider renren_spider renren.com
# 或者
scrapy genspider -t crawl renren_spider renren.com
  1. 运行爬虫
scrapy crawl renren_spider
# 或者在爬虫项目中创建一个start.py文件
from scrapy import cmdline
cmdline.execute('scrapy crawl renren_spider'.split())
  1. 修改配置 setting.py
# 配置文件详解:https://blog.csdn.net/u011781521/article/details/70188171
ROBOTSTXT_OBEY=True  # 就是要遵守robots.txt 的规则
DOWNLOAD_DELAY=3  # 设置下载延时
DEFAULT_REQUEST_HEADERS = {
  'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  'Accept-Language': 'en',
  'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36',

} # 设置请求的header

  1. 说明
    scrapy_spider,会先调用start_requests访问start_urls中配置的连接,将返回的结果默认交给parse函数处理。如果有特殊处理要求的话,可以自己重构start_requests函数

xpath

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可多学习xpath函数

  • 根据内容定位元素
driver.find_element_by_xpath("//*[text()='{}']".format(boxInput['定位文本']))
# 包含
driver.find_element_by_xpath('//div[contains(text(), "{}")]'.format(send_data['定位文本']))

CSS

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

CrawlSpider

需要使用LinkExtractorRule这两个东西来决定爬虫的具体走向

  1. allow设置规则的方法:要能够限制在我们想要的url上面,不要跟其他url产生相同的正则表达式即可;
  2. 什么情况下使用follow:如果爬取的页面需要将满足当前条件的url在进行跟进,那么就设置成True,否则设置成False
  3. 什么情况下指定callback:若url对应的页面只是为了获取更多的url,并不需要里面的数据,那么可以不指定callback,否则需要指定callbakc

Scrapy Shell

Scrapy shell也称"Scrapy终端",是一个交互终端,使我们可以在未启动spider爬虫的情况下尝试及调试代码。
使用
cmd到对应的爬虫项目,运行如下命令:

scrapy shell +要访问的url
如: scrapy shell http://www.wxapp-union.com/article-6099-1.html

Request和response

常用参数:

  1. url:这个request对象发送请求的url
  2. callback:指定一个回调函数,该回调函数以这个request是的response作为第一个参数。如果未指定callback,则默认使用spider的parse()方法。
  3. method(string):HTTP请求的方法,默认为GET
  4. headers:请求头,对于一些固定的设置,放在setting.py中指定就可以了,对于那些非固定的,可以在发送请求时指定。
  5. meta(dict):指定Request.meta属性的初始值。如果给了该参数,dict将会浅拷贝
  6. encoding:编码,默认是utf–8
  7. dont_filter:表示不由调度器过滤,在执行多次重复的请求时用得比较多
  8. errback:在发生错误的时候执行的函数。

下载和处理文件和图片

  1. 需要在settings.py中的ITEM_PIPELINES中加入: 'scrapy.pipelines.images.ImagesPipeline': 1

elasticsearch

  1. elasticsearch是语句java开发的,所以一定要安装jdk
  2. elasticsearch 5及其以上的版本需要安装java8及以上
  3. cmd 输入java -version查看java的版本号

安装

第一步:下载,https://github.com/medcl/elasticsearch-rtf

第二步:按照上面的步骤执行安装命令
cmd 到:G:\study_code\elasticsearch-rtf-master\bin, 执行elasticsearch即可,然后在浏览器中访问http://127.0.0.1:9200/,如果能访问则表示安装成功

第三步:安装elasticsearch-head,下载地址:https://github.com/mobz/elasticsearch-head
安装node:https://blog.csdn.net/luxiangy1314/article/details/105693054
安装cnpm:自行查找教程

第四步:安装kibana
kibana必须与elasticsearch的版本保持一致
下载地址:https://www.elastic.co/cn/downloads/past-releases
cmd 到G:\study_code\kibana-5.1.2-windows-x86\bin
执行kibana.bat
浏览器访问:http://localhost:5601

Redis

Redis下载地址:https://github.com/ServiceStack/redis-windows/tree/master/downloads

爬虫和反爬虫

1. 对抗过程

网站不可能从根本上解决爬虫的
在这里插入图片描述

Request

  1. Request(url, callback=None, method=‘GET’, headers=None, body=None,
    cookies=None, meta=None, encoding=‘utf-8’, priority=0,
    dont_filter=False, errback=None, flags=None, cb_kwargs=None)
    cookies:登录后Scrapy会自动将我们的cookies加入到Request中
    priority:用来影响scheduler的调度优先级
    dont_filter:false表明这个request不应该被过滤掉

随机更换user-agent

  1. 安装fake-useragent,fake-useragent维护的user-agent:https://fake-useragent.herokuapp.com/browsers/0.1.11
pip install fake-useragent
  1. 编写自己的middleware,用于随机更换user-agnet
    在middleware.py中添加如下代码:
from fake_useragent import UserAgent

class RandomUserAgentMiddleware:
    # 随机更换User-Agent
    def __init__(self, crawler):
        super(RandomUserAgentMiddleware, self).__init__()
        self.ua = UserAgent()
        self.ua_type = crawler.settings.get('RANDOM_UA_TYPE', 'random')
        
    @classmethod
    def from_crawler(cls, crawler):
        return cls(crawler)
    
    def process_request(self, request, spider):
        def get_ua():
            # getattr: 取self.ua中的self.ua_type
            return getattr(self.ua, self.ua_type)
        
        request.headers.setdefault('User-Agent', get_ua())
  1. 修改setting.py
    DOWNLOADER_MIDDLEWARES 介绍:https://blog.csdn.net/freeking101/article/details/88019714
DOWNLOADER_MIDDLEWARES = {
   'tongcheng.middlewares.RandomUserAgentMiddleware': 543,
   # 如果您想禁止内置的(在 DOWNLOADER_MIDDLEWARES_BASE 中设置并默认启用的)中间件, 您必须在项目的 DOWNLOADER_MIDDLEWARES 设置中定义该中间件,并将其值赋为 None
   'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
}

# 设置ua随机取User-Agent的服务器类型, https://pypi.org/project/fake-useragent/
RANDOM_UA_TYPE = 'random'

ip池

验证码识别

  1. 图片识别
  2. 在线打码:云打码
  3. 人工打码

scrapy配置

  1. cookies的禁用:用些平台会根据cookies来跟踪
COOKIES_ENABLED = False
  1. 限速:Scrapy默认在每个网页下载之间的空隙是0
    参考文献:https://scrapy-chs.readthedocs.io/zh_CN/0.24/topics/autothrottle.html
# 开启自动限速
AUTOTHROTTLE_ENABLED = True

给不同的spider设置不同的setting

在每一个spider中设置独有的custom_settings
setting.py是所用spider的通用设置

custom_settings = {'COOKIES_ENABLED': True}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Scrapy是一个适用于Python的快速、高层次的屏幕抓取和web抓取框架。它可以用于抓取web站点并从页面中提取结构化的数据。Scrapy的用途广泛,可以用于数据挖掘、监测和自动化测试。Scrapy是一个框架,可以根据需求进行定制,并提供了多种类型爬虫的基类,如BaseSpider和sitemap爬虫等。最新版本还提供了对web2.0爬虫的支持。 网络爬虫框架Scrapy还有一些基本模块,包括spiders、items、pipelines和middlewares等。其中,spiders下的jingding.py是Scrapy自动生成的爬虫文件,它继承了scrapy.Spider类,这是Scrapy中最基本的类,所有编写的爬虫都必须继承这个类。在jingding.py文件中,可以定义需要爬取的网站的URL和解析响应的方法等。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [爬虫框架 Scrapy 详解](https://blog.csdn.net/m0_67403076/article/details/126081516)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [开源python网络爬虫框架Scrapy.pdf](https://download.csdn.net/download/weixin_72426331/85854755)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值