scrapy六


设置代理ip

  • 代理的作用:
    突破自身的IP访问限制
    隐藏自身真实的ip
  • 如何获取ip:付费代理
  • 代理ip的匿名度:
    透明 服务器知道这次使用了代理 也知道真实的ip
    匿名 服务器知道使用了代理 不知道真实的ip
    高匿 不知道使用了代理 也不知道真实的ip
class IPProxyDownloaderMiddleware:
    PROXIES = [
    	{"ip":"114.99.0.78","port":894,"expire_time":"2021-02-03 20:25:43"},
    	{"ip":"114.238.217.172","port":894,"expire_time":"2021-02-03 20:40:40"}
    	]
    def process_request(self, request, spider):
        proxy = random.choice(self.PROXIES)
        # http://127.0.0.1:8889
        proxy_url = 'http://' + proxy['ip'] + ':' + str(proxy['port'])
        request.meta['proxy'] = proxy_url
import requests

url = 'http://httpbin.org/ip'
# 设置代理ip
proxy = {
    'http':'180.122.153.58:766'
}
res = requests.get(url,proxies=proxy)
print(res.text)

设置随机的请求头(u-a)

fake-useragent
它有一个类 UserAgent() 这个类可以随机生成u-a
ua = UserAgent()
常用的方法
1 ua.randome 可以随机生成u-a
2 生成指定的ua 例如 ua.ie ua.chrom ua.firefox
每次爬取从列表中随机选取一个UserAgent

user_agent = random.choice(self.USER_AGENTS)
    request.headers['User-Agent'] = user_agent

scrapy集成selenium

集成的思路是先通过selenium正常的去操作,然后在把逻辑集成到scrapy当中

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
​
driver = webdriver.Chrome()
url = 'https://www.jianshu.com/p/7e2b63ed0292'
driver.get(url)# 显示等待 等待 展开更多 这个按钮
WebDriverWait(driver,6).until(
    EC.element_to_be_clickable((By.XPATH,'//section[position()=2]/div/div'))
)while True:
    try:
        more_btn = driver.find_element_by_xpath('//section[position()=2]/div/div')
        driver.execute_script('arguments[0].click();',more_btn)
        # more_btn.click()
    except:
        break

把这些逻辑 集成到scrapy当中 让scrapy去访问每个文章
要集成selenium 需要在下载中间件中去实现逻辑

Redis

随着互联网+大数据时代的来临,传统的关系型数据库已经不能满足中大型网站日益增长的访问量和数据量。这个时候就需要一种能够快速存取数据的组件来缓解数据库服务I/O的压力,来解决系统性能上的瓶颈。

  • MySql数据库:
    关系型数据库
    持久化数据 硬盘
    读取速度比较慢
    MySql数据库的运行机制 存在大量的I/O操作
  • Redis是一个高性能的,开源的,C语言开发的,键值对存储数据的nosql数据库。
    NoSQL:not only sql,泛指非关系型数据库 Redis/MongoDB/Hbase Hadoop
    关系型数据库:MySQL、oracle、SqlServer
  • 数据库的发展历史
    1.在互联网+大数据时代来临之前,企业的一些内部信息管理系统,一个单个数据库实例就能满足系统的需求
    单数据库实例
    2.随着系统访问用户的增多,数据量的增大,单个数据库实例已经满足不了系统的读取需求
    缓存(memcache)+单数据库实例
    3.缓存可以缓解系统的读取压力,但是数据量的写入压力持续增大,
    缓存+主从数据库+读写分离
    4.数据量再次增大,读写分离以后,主数据库的写库压力出现瓶颈、
    缓存+主从数据库集群+读写分离+分库分表
    5.互联网+大数据时代来临,关系型数据库不能很好的存取一些并发性高,实时性高的,并且数据格式不固定的数据。
    nosql+主从数据库集群+读写分离+分库分表

NoSQL和SQL数据库的比较

适用场景不同:SQL数据库适合用于关系特别复杂的数据查询场景,nosql反之
事务:SQL对事务的支持非常完善,而nosql基本不支持事务
两者在不断的取长补短

Redis特性

Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
Redis不仅仅支持简单的key-value类型的数据,同时还提供List,set等数据类型
Redis支持数据的备份
Redis的主要作用:快速存取
Redis应用场景:点赞/秒杀/直播平台的在线好友列表/商品排行榜
Redis官网地址:https://redis.io/
命令地址:http://doc.redisfans.com/
Redis的五大数据类型:

string/list/set/hash/zset
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值