精华内容
下载资源
问答
  • 下面小编就为大家带来一篇使用Post方法模拟登陆爬取网页的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • scrapy基础知识之发送POST请求:可以使用 yield scrapy.FormRequest(url, formdata, callback)方法发送POST请求。如果希望程序执行一开始就发送POST请求,可以重写Spider类的start_requests(self) 方法,并且不再...

    Scrapy模拟表单和Ajax发送POST请求

    scrapy.FormRequest

    普通请求使用scrapy.Request类就可以实现,但是遇到模拟表单或Ajax提交post请求的时候,Request类就不如 子类 FormRequest类方便了,因为他自带 formdata ,专门用来设置表单字段数据,默认method也是POST。

    def start_requests(self):
        form_data = {'f1':'1', 'f2':'100'}  # 表单数据,字典格式,注意数字也要用引号引起来,否则报错。
        yield scrapy.FormRequest(url, formdata=form_data) # 还可以通过callback修改回调函数等
    • 1
    • 2
    • 3

    参考: 
    http://scrapy-chs.readthedocs.io/zh_CN/0.24/topics/request-response.html?highlight=post#formrequest-objects 
    https://stackoverflow.com/questions/39012902/scrapy-making-request-with-post-method

    scrapy.http.FormRequest

    还有其他方法,如scrapy.http.FormRequest,但是感觉不如以上方法方便:


    return [scrapy.http.FormRequest(
        self.myurl, 
        formdata={'f1':'123','f2':'456'},
        callback=self.parse)]
    eg:

     from scrapy.item import Item, Field
    from scrapy.http import FormRequest
    from scrapy.spider import BaseSpider
    
    
    class DeltaItem(Item):
        title = Field()
        link = Field()
        desc = Field()
    
    
    class DmozSpider(BaseSpider):
        name = "delta"
        allowed_domains = ["delta.com"]
        start_urls = ["http://www.delta.com"]
    
        def parse(self, response):
            yield FormRequest.from_response(response,
                                            formname='flightSearchForm',
                                            formdata={'departureCity[0]': 'JFK',
                                                      'destinationCity[0]': 'SFO',
                                                      'departureDate[0]': '07.20.2013',
                                                      'departureDate[1]': '07.28.2013'},
                                            callback=self.parse1)
    
        def parse1(self, response):
            print response.status

    scrapy基础知识之发送POST请求:

    • 可以使用 yield scrapy.FormRequest(url, formdata, callback)方法发送POST请求。

    • 如果希望程序执行一开始就发送POST请求,可以重写Spider类的start_requests(self) 方法,并且不再调用start_urls里的url。

    class mySpider(scrapy.Spider):
        # start_urls = ["http://www.example.com/"]
    
        def start_requests(self):
            url = 'http://www.renren.com/PLogin.do'
    
            # FormRequest 是Scrapy发送POST请求的方法
            yield scrapy.FormRequest(
                url = url,
                formdata = {"email" : "xxx", "password" : "xxxxx"},
                callback = self.parse_page
            )
        def parse_page(self, response):
            # do something

    scrapy基础知识之 使用FormRequest.from_response()方法模拟用户登录:

    通常网站通过 实现对某些表单字段(如数据或是登录界面中的认证令牌等)的预填充

    使用Scrapy抓取网页时,如果想要预填充或重写像用户名、用户密码这些表单字段, 可以使用 FormRequest.from_response() 方法实现。

    下面是使用这种方法的爬虫例子:

    import scrapy
    
    class LoginSpider(scrapy.Spider):
        name = 'example.com'
        start_urls = ['http://www.example.com/users/login.php']
    
        def parse(self, response):
            return scrapy.FormRequest.from_response(
                response,
                formdata={'username': 'john', 'password': 'secret'},
                callback=self.after_login
            )
    
        def after_login(self, response):
            # check login succeed before going on
            if "authentication failed" in response.body:
                self.log("Login failed", level=log.ERROR)
                return

    展开全文
  • 主要介绍了php模拟登陆的实现方法,实例分析了snoopy与curl两种实现方法,具有一定参考借鉴价值,需要的朋友可以参考下
  • 主要介绍了Python 模拟登陆的两种实现方法的相关资料,这里提供两种方法一个是普通写法写的,另外一个是基于面向对象写的,模拟登录成功后才可能抓取内容,需要的朋友可以参考下
  • 主要介绍了PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法,实例分析了php实用curl模拟登陆163邮箱的操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • 主要介绍了python requests模拟登陆github的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 详解爬虫模拟登陆的三种方法

    万次阅读 多人点赞 2019-06-09 15:13:01
    摘要:在进行爬虫时,除了常见...本文以只需输入账号密码就能登录的桔子网为例,介绍模拟登录常用的 3 种方法。 POST 请求方法:需要在后台获取登录的 URL并填写请求体参数,然后 POST 请求登录,相对麻烦; ...

    摘要: 在进行爬虫时,除了常见的不用登录就能爬取的网站,还有一类需要先登录的网站。比如豆瓣、知乎,以及上一篇文章中的桔子网。这一类网站又可以分为:只需输入帐号密码、除了帐号密码还需输入或点击验证码等类型。本文以只需输入账号密码就能登录的桔子网为例,介绍模拟登录常用的 3 种方法。

    • POST 请求方法:需要在后台获取登录的 URL并填写请求体参数,然后 POST 请求登录,相对麻烦;

    • 添加 Cookies 方法:先登录将获取到的 Cookies 加入 Headers 中,最后用 GET 方法请求登录,这种最为方便;

    • Selenium 模拟登录:代替手工操作,自动完成账号和密码的输入,简单但速度比较慢。

    下面,我们用代码分别实现上述 3 种方法。

    1. 目标网页

    这是我们要获取内容的网页:

    http://radar.itjuzi.com/investevent

     

    这个网页需要先登录才能看到数据信息,登录界面如下:

     

    可以看到,只需要输入账号和密码就可以登录,不用输验证码,比较简单。下面我们利用一个测试账号和密码,来实现模拟登录。

    2. POST 提交请求登录

    首先,我们要找到 POST 请求的 URL。

    有两种方法,第一种是在网页 devtools 查看请求,第二种是在 Fiddler 软件中查看。

    先说第一种方法。

     

    在登录界面输入账号密码,并打开开发者工具,清空所有请求,接着点击登录按钮,这时便会看到有大量请求产生。哪一个才是 POST 请求的 URL呢?这个需要一点经验,因为是登录,所以可以尝试点击带有 「login」字眼的请求。这里我们点击第四个请求,在右侧 Headers 中可以看到请求的 URL,请求方式是 POST类型,说明 URL 找对了。

     

    接着,我们下拉到 Form Data,这里有几个参数,包括 identify 和 password,这两个参数正是我们登录时需要输入的账号和密码,也就是 POST 请求需要携带的参数。

     

    参数构造非常简单,接下来只需要利用 Requests.post 方法请求登录网站,然后就可以爬取内容了。

    下面,我们尝试用 Fiddler 获取 POST 请求。

    如果你对 Fiddler 还不太熟悉或者没有电脑上没有安装,可以先了解和安装一下。

    Fiddler 是位于客户端和服务器端的 HTTP 代理,也是目前最常用的 HTTP 抓包工具之一 。 它能够记录客户端和服务器之间的所有 HTTP 请求,可以针对特定的 HTTP 请求,分析请求数据、设置断点、调试 web 应用、修改请求的数据,甚至可以修改服务器返回的数据,功能非常强大,是 web 调试的利器。

    Fiddler 下载地址:

    https://www.telerik.com/download/fiddler

    使用教程:

    https://zhuanlan.zhihu.com/p/37374178

    http://www.hangge.com/blog/cache/detail_1697.html

    下面,我们就通过 Fiddler 截取登录请求。

    当点击登录时,官场 Fiddler 页面,左侧可以看到抓取了大量请求。通过观察,第15个请求的 URL中含有「login」字段,很有可能是登录的 POST 请求。我们点击该请求,回到右侧,分别点击「inspectors」、「Headers」,可以看到就是 POST 请求,该 URL 和上面的方法获取的 URL 是一致的。

     

    接着,切换到右侧的 Webforms 选项,可以看到 Body 请求体。也和上面方法中得到的一致。

     

    获取到 URL 和请求体参数之后,下面就可以开始用 Requests.post 方法模拟登录了。

    代码如下:

     1import requests
     2headers = {
     3    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',
     4    }
     5data = {
     6    'identity':'irw27812@awsoo.com',   
     7    'password':'test2018',
     8}
     9url ='https://www.itjuzi.com/user/login?redirect=&flag=&radar_coupon='
    10session = requests.Session()
    11session.post(url,headers = headers,data = data)
    12# 登录后,我们需要获取另一个网页中的内容
    13response = session.get('http://radar.itjuzi.com/investevent',headers = headers)
    14print(response.status_code)
    15print(response.text)
    

    使用 session.post 方法提交登录请求,然后用 session.get 方法请求目标网页,并输出 HTML代码。可以看到,成功获取到了网页内容。

     

    下面,介绍第 2 种方法。

    3. 获取 Cookies,直接请求登录

    上面一种方法,我们需要去后台获取 POST 请求链接和参数,比较麻烦。下面,我们可以尝试先登录,获取 Cookie,然后将该 Cookie 添加到 Headers 中去,然后用 GET 方法请求即可,过程简单很多。

    代码如下:

     1import requests
     2headers = {
     3    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',
     4    'Cookie': '你的cookie',
     5}
     6url = 'https://www.itjuzi.com/user/login?redirect=&flag=&radar_coupon='
     7session = requests.Session()
     8response = session.get('http://radar.itjuzi.com/investevent', headers=headers)
     9
    10print(response.status_code)
    11print(response.text)
    

    可以看到,添加了 Cookie 后就不用再 POST 请求了,直接 GET 请求目标网页即可。可以看到,也能成功获取到网页内容。

     

    下面介绍第 3 种方法。

    4. Selenium 模拟登录

    这个方法很直接,利用 Selenium 代替手动方法去自动输入账号密码然后登录就行了。

    代码如下:

     1from selenium import webdriver
     2from selenium.webdriver.common.by import By
     3from selenium.webdriver.support import expected_conditions as EC
     4from selenium.webdriver.support.wait import WebDriverWait
     5browser = webdriver.Chrome()
     6browser.maximize_window()  # 最大化窗口
     7wait = WebDriverWait(browser, 10) # 等待加载10s
     8
     9def login():
    10    browser.get('https://www.itjuzi.com/user/login')
    11    input = wait.until(EC.presence_of_element_located(
    12        (By.XPATH, '//*[@id="create_account_email"]')))
    13    input.send_keys('irw27812@awsoo.com')
    14    input = wait.until(EC.presence_of_element_located(
    15        (By.XPATH, '//*[@id="create_account_password"]')))
    16    input.send_keys('test2018')
    17    submit = wait.until(EC.element_to_be_clickable(
    18        (By.XPATH, '//*[@id="login_btn"]')))
    19    submit.click() # 点击登录按钮
    20    get_page_index()
    21
    22def get_page_index():
    23    browser.get('http://radar.itjuzi.com/investevent')
    24    try:
    25        print(browser.page_source)  # 输出网页源码
    26    except Exception as e:
    27        print(str(e))
    28login()
    

    这里,我们在网页中首先定位了账号节点位置:'//*[@id="create_account_email"]',然后用 input.send_keys 方法输入账号,同理,定位密码框位置并输入密码。接着定位 登录 按钮的位置://*[@id="login_btn"],然后用 submit.click() 方法实现点击登录按钮操作,从而完成登录。可以看到,也能成功获取到网页内容。

     

    以上就是模拟需登录网站的几种方法。当登录进去后,就可以开始爬取所需内容了。

    源代码可以在下面链接中获得:

    https://github.com/makcyun/web_scraping_with_python

    5. 总结:

    • 本文分别实现了模拟登录的 3 种操作方法,建议优先选择第 2 种,即先获取 Cookies 再 Get 请求直接登录的方法。

    • 本文模拟登录的网站,仅需输入账号密码,不需要获取相关加密参数,比如 Authenticity_token ,同时也无需输入验证码,所以方法比较简单。但是还有很多网站模拟登录时,需要处理加密参数、验证码输入等问题。后续将会介绍。

    本文完。

    展开全文
  • 模拟登陆(三)--用session模拟登陆

    千次阅读 2018-05-19 23:48:22
    session模拟登陆方法:1、用session并携带headers和data进行请求登陆接口2、请求成功后,session中会携带cookie信息,再通过session请求登陆后页面即可实现模拟登陆该篇文章不明白的留言,100多个爬虫、数据分析、...

    session模拟登陆方法:

    1、用session并携带headers和data进行请求登陆接口

    2、请求成功后,session中会携带cookie信息,再通过session请求登陆后页面即可实现模拟登陆



    该篇文章不明白的留言,100多个爬虫、数据分析、机器学习源码已经上传知识星球(左侧为知识星球,右侧二维码为微信公众号)

               



    展开全文
  • 电子政务-基于模拟登陆的信息系统电子巡检方法.zip
  • java模拟登陆

    2013-03-21 22:17:38
     方法是使用java模拟登陆,登陆后记录下cookie信息,在下次发起请求时时将cookie发送过去用以表明身份,这样就能够访问带有权限的URL了。  下面首先介绍使用java模拟登陆。 // 连接地址(通过阅读html源代码...

        在使用java访问URL时,如果该URL需要身份验证,那么就不能够直接访问,因为没有登陆。那么,如何解决这个问题呢?

        方法是使用java模拟登陆,登陆后记录下cookie信息,在下次发起请求时时将cookie发送过去用以表明身份,这样就能够访问带有权限的URL了。

        下面首先介绍使用java模拟登陆。

                    // 连接地址(通过阅读html源代码获得,即为登陆表单提交的URL)
    		String surl = "http://login.goodjobs.cn/index.php/action/UserLogin";
    
    		/**
    		 * 首先要和URL下的URLConnection对话。 URLConnection可以很容易的从URL得到。比如: // Using
    		 * java.net.URL and //java.net.URLConnection
    		 */
    		URL url = new URL(surl);
    		HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    
    		/**
    		 * 然后把连接设为输出模式。URLConnection通常作为输入来使用,比如下载一个Web页。
    		 * 通过把URLConnection设为输出,你可以把数据向你个Web页传送。下面是如何做:
    		 */
    		connection.setDoOutput(true);
    		/**
    		 * 最后,为了得到OutputStream,简单起见,把它约束在Writer并且放入POST信息中,例如: ...
    		 */
    		OutputStreamWriter out = new OutputStreamWriter(connection
    				.getOutputStream(), "GBK");
                    //其中的memberName和password也是阅读html代码得知的,即为表单中对应的参数名称
    		out.write("memberName=myMemberName&password=myPassword"); // post的关键所在!
    		// remember to clean up
    		out.flush();
    		out.close();
    
    		// 取得cookie,相当于记录了身份,供下次访问时使用
    		String cookieVal = connection.getHeaderField("Set-Cookie");

        登陆成功后,即可访问其他URL了。

                    String s = "http://user.goodjobs.cn/dispatcher.php/module/Resume/action/Preview";
    		//重新打开一个连接
                    url = new URL(s);
    		HttpURLConnection resumeConnection = (HttpURLConnection) url
    				.openConnection();
    		if (cookieVal != null) {
                            //发送cookie信息上去,以表明自己的身份,否则会被认为没有权限
    			resumeConnection.setRequestProperty("Cookie", cookieVal);
    		}
    		resumeConnection.connect();
    		InputStream urlStream = resumeConnection.getInputStream();
    		BufferedReader bufferedReader = new BufferedReader(
    				new InputStreamReader(urlStream));
    		String ss = null;
    		String total = "";
    		while ((ss = bufferedReader.readLine()) != null) {
    			total += ss;
    		}
    		IOUtils.write(total, new FileOutputStream("d:/index.html"));
    		bufferedReader.close();


    from:http://blog.csdn.net/prince2270/article/details/6137810

    author:prince2270


    展开全文
  • 使用scrapy进行模拟登陆三种方式

    千次阅读 2018-06-06 00:02:23
    scrapy有三种方法模拟登陆方式:- 直接携带cookies - 找url地址,发送post请求存储cookie - 找到对应的form表单,自动解析input标签,自动解析post请求的url地址,自动带上数据,自动发送请求1、携带cookies登陆...
  • 主要介绍了PHP实现微信模拟登陆并给用户发送消息的方法,可实现发送文字、图片及图文的功能,涉及php针对微信接口的相关操作技巧,需要的朋友可以参考下
  • Python模拟登陆

    千次阅读 2016-05-16 12:32:33
    下面分享一个使用Python进行网站模拟登陆的小例子。原理使用Cookie技术,绕开网站登录验证。要使用到cookielib库。流程: 创建一个保存Cookie的容器,可选的有CookieJar,FileCookieJar,MozillaCookieJar,...
  • 1.使用urllib.request 底层库 使用cookiejar保存cookie 2.使用requests 时 使用session来保存cookie 3.代码登陆 使用带有cookie的session去请求目标网址 来实现抓取需要登录才能爬取的数据 ...
  • 模拟实现网络登陆,采用idhttp post 方法
  • 模拟登陆状态的两种方法

    千次阅读 2018-06-11 17:16:58
    1.直接登陆后获取cookieimport requests # 直接将登陆成功之后的Cookie放在headers中,向页面发送请求。 url = 'https://www.zhihu.com/' headers = { "Host": "www.zhihu.com", "...
  • 掌握模拟登陆的思路 掌握scrapy中模拟登陆的三种方式 1 scrapy中下载中间件的使用 使用方法: 编写一个Downloader Middlewares和我们编写一个pipeline一样,定义一个类,然后在setting中开启 Downloader...
  • 主要介绍了python项目实战:模拟登陆CSDN,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • PHP HttpClient模拟登陆

    千次阅读 2015-02-11 21:40:56
    比如工大的模拟登陆: 也可以通过查看源代码 搜索 就会发现lt这个属性,然后我们如何获取其值呢?。。我们可以现在模拟登陆的界面获取,代码如下: header("content-Type: text/html; charse
  • 工程里的入口类为:mnLogin.java ,由于模拟登陆的网站,使用了自签名的SSL证书,所以新增两个方法,创建HttpClient不校验服务端证书,后台通过调用登陆接口,获得返回的cookie信息,在使用登陆成功获得cookie,调取...
  • Python网络爬虫之模拟登陆

    万次阅读 多人点赞 2018-03-16 10:44:49
    为什么要模拟登陆  Python网络爬虫应用十分广泛,但是有些网页... 模拟登陆后有两种方法可以保存用户信息,通过Session来保存登陆信息或者通过Cookie来保存登陆信息 一、Session的用法 # 导入requests模块...
  • 1. 为什么需要模拟登陆?  获取cookie,能够爬取登陆后的页面的数据 2.使用cookie模拟登陆的场景  (1) cookie过期时间很长,常见于一些不规范的网站  (2) 能在cookie过期之前把搜有的数据拿到  (3) 配合...
  • 爬虫模拟登陆果壳网

    千次阅读 2018-11-02 11:50:12
    有些网页可以直接使用爬虫模拟登陆,验证码可以使用图像识别(不过我还没学,就先使用人工了),这样可以达到批量获取cookies。我看到了一个特别简单,适合刚开始练手的网站果壳网。 –要想模拟登陆...
  • 模拟登陆CSDN——就是这么简单

    千次阅读 多人点赞 2014-08-24 01:43:55
    模拟登陆CSDN——就是这么简单
  • 本文细致的讲解了如何模拟登陆百度云

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 46,643
精华内容 18,657
关键字:

方法模拟登陆