scrapy 爬虫,为异步io框架;因此此处选择,先用requests请求,保存cookie文件,然后scrapy爬取前,在入口处加载cookie。
* 登录,保存cookie方法见前两节,此处展示的是scrapy读取cookie
* 首先要明确,scrapy框架关于登录的一些基础知识
1. scrapy 爬取有一个入口,在入口处加载cookie,后续的爬取会自动加载cookie信息
2. scrapy cookie的加载时接收字典形式的,因此,和requests加载cookie不同,要先转化为字典
#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-
# @Time : 2018/4/18 18:10
# @Author : ysj
import os
import http.cookiejar as cookielib
import requests
from scrapy_article.utl.ZhiHuLogIn import ZhiHu
cookie_file = os.path.join(os.path.dirname(__file__), 'zhihu_cookie.txt')
def load_cookie(filename=cookie_file):
"""加载cookie文件"""
cookie = cookielib.LWPCookieJar()
cookie.load(filename, ignore_discard=True, ignore_expires=True)
return requests.utils.dict_from_cookiejar(cookie)
def get_dict_cookie(account='18516157608', password='******'):
"""" 调用前一节中的登录,"""
login = ZhiHu(account, password)
return requests.utils.dict_from_cookiejar(login.session.cookies)
if __name__ == '__main__':
print(load_cookie())
print(get_dict_cookie('18516157608', '*****'))
主要是重写scrapy入口请求,添加cookie和headers
篇幅问题,此处指显示了重写的入口函数和一个登录是否成功的验证函数;需要提前加载上文load_cookie函数
class ZhihuSpider(scrapy.Spider):
name = 'zhihu'
allowed_domains = ['www.zhihu.com']
start_urls = ['https://www.zhihu.com/']
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36',
'HOST': 'www.zhihu.com',
'Referer': 'https://www.zhihu.com/signin?next=%2F',
'Authorization': 'oauth c3cef7c66a1843f8b3a9e6a1e3160e20'
}
login_url = 'https://www.zhihu.com/api/v3/oauth/sign_in'
captcha_url = 'https://www.zhihu.com/api/v3/oauth/captcha?lang=en'
check_url = 'https://www.zhihu.com/inbox'
# check_url = 'https://www.zhihu.com/'
def start_requests(self):
self.post_data['signature'] = self.get_signature()
return [scrapy.Request(url=self.check_url, headers=self.headers, method='GET', meta={
'dont_redirect': True},
cookies=load_cookie(), callback=self.check_login)]
def check_login(self, response):
"""用requests登录过,会保存cookie,传入scrapy使用,暂时不考虑scrapy登录"""
if response.status < 300:
print('登录成功')
for url in self.start_urls:
yield scrapy.Request(url, dont_filter=True, headers=self.headers)
else:
print('未登录,即将拉取验证码,重新登录')
yield [scrapy.Request(url=self.check_url, headers=self.headers, method='GET', meta={
'dont_redirect': True},
cookies=get_dict_cookie(), callback=self.check_login)]
文章浏览阅读3.8k次。基于HTML5的可预览多图片Ajax上传by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1923一、关于图片上传什么什么的在XHTML的时代,我们使用HTML file控件上传图片一次只能上传一张。要一次上传多图,做法是借助于flash。例如s
文章浏览阅读3.3w次,点赞109次,收藏772次。从0到1教你如何下载MySQL,并安装配置环境变量,一看就懂,适合小白_mysqlhome怎么配置
文章浏览阅读643次。 基本的IO编程过程(包括网络IO和文件IO)是,打开文件描述符(windows是handler,java是stream或channel),多路捕获(Multiplexe,即select和poll和epoll)IO可读写的状态,而后可以读写的文件描述符进行IO读写,由于IO设备速度和CPU内存比速度会慢,为了更好的利用CPU和内存,会开多线程,每个线程读写一个文件描述符。 但C10K问题,让我们..._netty epoll 比较
文章浏览阅读549次。【转载】VB支持XP256色的ico图标工具ArtIcons Pro序列号:ArtIcons专业版是一款具有渐层着色的功能专门用于制作图标的工具,下面是小编为大家搜罗的一些ArtIcons的序列号,需要的可以看一下:se7994t6z6se2tjuggb6seypqveabu ..._vb256图标
文章浏览阅读404次。作为一个安全菜鸟正在慢慢入门,在了解完基本的CTF知识后就开始刷题找知识点的感觉了虽然并不想写这篇博客,因为大部分题的思路都是看人家的writeup,并且人家写的比我更详细,但一些题目有很多知识点需要记住,所以就有了这篇博客WEB篇LOCALHOST看解决数量就知道没啥可说的;对于ip可控的2个头部一个是x-forwarded-for,一个是client-ipx-forwarded-for: X-Forwarded-For(XFF)是用来识别通过HTTP代理或负载均衡方式连接到Web服务器._jarvisoj dsa
文章浏览阅读3.7k次。0、认识组件间的通信在开发过程中,我们会经常遇到需要组件之间相互进行通信:比如App可能使用了多个Header,每个地方的Header展示的内容不同,那么我们就需要使用者传递给Header一些数据,让其进行展示;又比如我们在Main中一次性请求了Banner数据和ProductList数据,那么就需要传递给他们来进行展示;也可能是子组件中发生了事件,需要由父组件来完成某些操作,那就需要子组件向父组件传递事件;总之,在一个React项目中,组件之间的通信是非常重要的环节; 父组件在展示子组件_react子传父通信
文章浏览阅读1.3w次,点赞15次,收藏51次。官方文档:MinIO Quickstart Guide| Minio中文文档1、简介Minio 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。Minio是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。2、容器安装..._minio endpoint
文章浏览阅读6.8k次。引子: 课题需要,同时采集两个摄像头数据,频率不高,但要同时。中间遇到的问题,唉一言难尽啊!为了图省事使用UVC摄像头,但是板子是USB1.1接口的,故挑选兼容USB1.1的UVC驱动的摄像头,最终选定两个301V芯片的摄像头,先使用一个摄像头,因频率不高,将采集频率设到了最_linux上接两个摄像头
文章浏览阅读187次。 校园网页设计 、学校班级网页制作、学校官网、小说书籍、等网站的设计与制作。️HTML静态网页设计作业使用dreamweaver制作,采用DIV+CSS布局,共有多个页面,首页使用CSS排版比较丰富,色彩鲜明有活力。顶部导航及底部区域背景色为100%宽度,主体内容区域宽度 一套优质的网页设计应该包含 (具体可根据个人要求而定)网站布局方面:计划采用目前主流的、能兼容各大主流浏览器、显示效果稳定的浮动网页布局结构。网站程序方面:计划采用最新的网页编程语言HTML5+CSS3+JS程序语_学校网站设计
文章浏览阅读2.9k次,点赞2次,收藏9次。什么是序列化和反序列化?序列化:序列化就是将 java对象 转化为字节序列的过程。序列化是指把一个Java对象变成二进制内容,本质上就是一个byte[]数组。 为什么要把Java对象序列化呢?因为序列化后可以把byte[]保存到文件中,或者把byte[]通过网络传输到远程,这样,就相当于把Java对象存储到文件或者通过网络传输出去了。注意:序列化是为了在传递和保存对象时,为了保证对象的完整性和可传递性。将对象转为有序的字节流,以便在网上传输或者保存在本地文件中。反序列化:反序列化就是将 字_java序列化与反序列化全讲解 mocas_wang
文章浏览阅读4.7k次。<!--pre.display {font-family:inherit}pre.format {font-family:inherit}pre.smalldisplay {font-family:inherit; font-size:smaller}pre.smallformat {font-family:inherit; font-size:smalle
文章浏览阅读520次。1、@value给属性赋值,使用方式有三种:基本数值SpEL; #{}写${};取出配置文件【properties】中的值(在运行环境变量里面的值)使用如下: @Value("张三") private String name; @Value("#{20-2}") private Integer age; @Value("${person.nickName}") private String nickName;其中第三种需要增加外部配置文件,需要使用@PropertySource_@value integer