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)
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
集成的思路是先通过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 需要在下载中间件中去实现逻辑
随着互联网+大数据时代的来临,传统的关系型数据库已经不能满足中大型网站日益增长的访问量和数据量。这个时候就需要一种能够快速存取数据的组件来缓解数据库服务I/O的压力,来解决系统性能上的瓶颈。
适用场景不同:SQL数据库适合用于关系特别复杂的数据查询场景,nosql反之
事务:SQL对事务的支持非常完善,而nosql基本不支持事务
两者在不断的取长补短
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
Redis不仅仅支持简单的key-value类型的数据,同时还提供List,set等数据类型
Redis支持数据的备份
Redis的主要作用:快速存取
Redis应用场景:点赞/秒杀/直播平台的在线好友列表/商品排行榜
Redis官网地址:https://redis.io/
命令地址:http://doc.redisfans.com/
Redis的五大数据类型:
string/list/set/hash/zset