模拟登陆知乎,返回400

模拟登陆知乎后,跳转到首页,返回400,请求无效,应该是知乎对request请求有做要求。

看了下请求头,主要关注cookie、referer和user_agent(不要问为什么,我看视频的),cookie在scrapy.Request里有单独参数。不管怎样,先测试下:

# -*- coding: utf-8 -*-
import scrapy,os,re
from scrapy.http import Request
from mouse import move
class ZhihuSpider(scrapy.Spider):
    name = ‘zhihu‘
    allowed_domains = [‘zhihu.com‘]
    start_urls = [‘http://zhihu.com/‘]

    headers = {
        # "HOST": "www.zhihu.com",
        "Referer": "https://www.zhizhu.com",
        ‘User-Agent‘: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
    }
    custom_settings = {
        "COOKIES_ENABLED": True,
        ‘User-Agent‘:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36",
        ‘HTTPERROR_ALLOWED_CODES‘ : [400]
    }
    def parse(self, response):

        pass

    def parse_request(self,response):
        pass

    def parse_answer(self,response):
        pass

    def start_requests(self):

        from selenium import webdriver
        from scrapy.selector import Selector

        project_dir = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))

        chromedriver_dir = os.path.join(project_dir, "tools\\chromedriver.exe")
        browser = webdriver.Chrome(
            executable_path=chromedriver_dir)

        browser.get("https://www.zhihu.com/signup?next=%2F")

        # 模拟登录知乎,选择登录选项
        # info = response.xpath(‘//*[@id="root"]/div/main/div/div/div/div[2]/div[2]/span/text()‘)
        browser.find_element_by_xpath(‘//*[@id="root"]/div/main/div/div/div/div[2]/div[2]/span‘).click()
        # 输入账号//*div[@class=‘SignFlow-accountInput Input-wrapper‘]/input
        browser.find_element_by_xpath(
            ‘//*[@id="root"]/div/main/div/div/div/div[2]/div[1]/form/div[1]/div[2]/div[1]/input‘).send_keys(
            "[email protected]")
        # 输入密码
        browser.find_element_by_xpath(
            ‘//*[@id="root"]/div/main/div/div/div/div[2]/div[1]/form/div[2]/div/div[1]/input‘).send_keys("*****")
        # 模拟登录知乎,点击登录按钮
        # //*[@id="root"]/div/main/div/div/div/div[2]/div[1]/form/button
        browser.find_element_by_xpath(‘//*[@id="root"]/div/main/div/div/div/div[2]/div[1]/form/button‘).click()
        import time
        time.sleep(10)
        Cookies = browser.get_cookies()
        print(Cookies)
        cookie_dict = {}
        import pickle
        pickle.dump(Cookies,
                    open("./ArticleSpider/cookies/zhihu.cookie", "wb"))
        # for cookie in Cookies:
        #     # 写入文件
        #     zhihu_cookie_dir = os.path.join(project_dir, "cookies\\zhihu\\")
        #     f = open(zhihu_cookie_dir + cookie[‘name‘] + ‘.zhihu‘, "wb")
        #     pickle.dump(cookie, f)
        #     f.close()
        #     cookie_dict[cookie[‘name‘]] = cookie[‘value‘]
        cookie_dict = {}
        for cookie in Cookies:
            cookie_dict[cookie["name"]] = cookie["value"]
        # browser.close()
        # return Request(url=r"https://www.zhihu.com/",headers=self.headers,cookies=cookie_dict,callback=self.check_login)
        return [Request(url=self.start_urls[0], dont_filter=True,headers=self.headers, cookies=cookie_dict)]

在Request里加上headers,再跳转到parse时,response就能看到首页了:

原文地址:https://www.cnblogs.com/laonicc/p/10896973.html

时间: 2024-08-30 02:54:33

模拟登陆知乎,返回400的相关文章

scrapy模拟登陆知乎--抓取热点话题

工具准备 在开始之前,请确保 scrpay 正确安装,手头有一款简洁而强大的浏览器, 若是你有使用 postman 那就更好了. scrapy genspider zhihu 使用以上命令生成知乎爬虫,代码如下: # -*- coding: utf-8 -*- import scrapy class ZhihuSpider(scrapy.Spider): name = 'zhihu' allowed_domains = ['www.zhihu.com'] start_urls = ['http:

HttpClient 模拟登陆知乎

最近做爬虫相关工作,我们平时用HttpWebRequest 比较多,每一个Url都要创建一个HttpWebRequest实例, 而且有些网站验证比较复杂,在登陆及后续抓取数据的时候,每次请求需要把上次的Cookie传递给这次请求. 记得这篇博客(http://www.cnblogs.com/dudu/archive/2013/03/05/httpclient.html)结尾,dudu总结了: HttpClient最与众不同的地方是同一个HttpClient实例可以发出多次请求,每次请求是可以是完

Python模拟登陆万能法-微博|知乎

Python模拟登陆让不少人伤透脑筋,今天奉上一种万能登陆方法.你无须精通HTML,甚至也无须精通Python,但却能让你成功的进行模拟登陆.本文讲的是登陆所有网站的一种方法,并不局限于微博与知乎,仅用其作为例子来讲解. 用到的库有"selenium"和"requests".通过selenium进行模拟登陆,然后将Cookies传入requests,最终用requests进行网站的抓取.优点就是不但规避了"selenium"其本身抓取速度慢的问题

Python模拟登陆万能法

此文转自:https://zhuanlan.zhihu.com/p/28587931   转录只是为了方便学习,感谢他的分享 Python模拟登陆让不少人伤透脑筋,今天奉上一种万能登陆方法.你无须精通HTML,甚至也无须精通Python,但却能让你成功的进行模拟登陆.本文讲的是登陆所有网站的一种方法,并不局限于微博与知乎,仅用其作为例子来讲解. 用到的库有"selenium"和"requests".通过selenium进行模拟登陆,然后将Cookies传入reque

Scrapy基础(十四)————知乎模拟登陆

#-*-coding:utf-8 -*-__author__ = "ruoniao"__date__ = "2017/5/31 20:59" 之前我们通过爬取伯乐在线的文章,伯乐在线对爬取没有什么限制,这次爬取知乎,就有了爬取限制,首先就是登录限制:为破解限制,首先就是模拟登录 模拟登陆首先要明白的就是session和cookie机制: 简单的说(个人理解):  http是一种无状态的协议,为解决用户每次都需要输入密码登录的烦恼,也为了服务器能够记住每次请求的浏览器

Scrapy基础(十四)————Scrapy实现知乎模拟登陆

模拟登陆大体思路见此博文,本篇文章只是将登陆在scrapy中实现而已 之前介绍过通过requests的session 会话模拟登陆:必须是session,涉及到验证码和xsrf的写入cookie验证的问题:在scrapy中不需担心此问题,因为Request会保证这是一个会话,并且自动传递cookies原理想通,因为验证码识别的问题,这里先使用cookie模拟登陆 1 # -*- coding: utf-8 -*- 2 3 import scrapy 4 import json 5 import

Python实现网站模拟登陆

一.实验简介 1.1 基本介绍 本实验中我们将通过分析登陆流程并使用 Python 实现模拟登陆到一个实验提供的网站,在实验过程中将学习并实践 Python 的网络编程,Python 实现模拟登陆的方法,使用 Firefox 抓包分析插件分析网络数据包等知识. 模拟登录可以帮助用户自动化完成很多操作,在不同场合下有不同的用处,无论是自动化一些日常的繁琐操作还是用于爬虫都是一项很实用的技能.本课程通过 Firefox 和 Python 来实现,环境要求如下: Python 库:urllib, ur

python_模拟登录知乎

如何登录知乎? 首先要分析,进行知乎验证的时候,知乎服务器需要我们提交什么数据,提交的地址.先进行几次登录尝试,通过浏览器中network中查看数据流得知,模拟登录知乎需要提供5个数据,分别是_xsrf.password.captcha_type.captcha.phone_num,这个是手机号码进行验证登录,提交地址 https://www.zhihu.com/login/phone_num ,那,开始获取这些个数据,其中那个图片验证码是最难得,通过第三方插件zheye进行验证码解析,就可以解

模拟登陆国内著名知识交流网站

之前看了很长时间的前端相关知识,怕python手生,写个模拟登陆恢复一下 zhihu网上的info有些是需要登陆后才能访问爬去的,所以不妨试一试 1 首先自己登陆,然后用fiddler进行抓包 发现登陆zhihu需要post以下data: A?, 验证码哪去了,算了,没有更好. 下面就要编写代码了,稍等,先看一下zhihu的response resp的类型是json格式,经过检查,msg的值就是我们的登录状态了,所以一会我们会打印出这个值证明是否登录. 2 下面就不多说了,直接上代码 #!/us