精华内容
下载资源
问答
  • 在初学爬虫(二):爬取静态网页之(2)获取网页响应内容——requests.get()函数中讲解了如何使用requests函数获取网页响应内容。 但是,有些网页不能如上直接被获取,而是需要对requests中的参数进行设置才能获取...

    初学爬虫(二):爬取静态网页之(2)获取网页响应内容——requests.get()函数中讲解了如何使用requests函数获取网页响应内容。
    但是,有些网页不能如上直接被获取,而是需要对requests中的参数进行设置才能获取需要的数据。

    1、设置传递URL(网络地址)参数

    如果需要请求获取特定的数据,就需要在URL(网络地址)的查询字符串中加入一些数据来实现。
    在requests中,直接使用params参数就可以实现设置URL参数:

    import requests
    
    key_dict = {'k1': 'v1', 'k2': 'v2'} #创建一个字典
    r = requests.get('http://httpbin.org/get', params=key_dict) #用params参数将字典内容构建到URL中
    print ("设置URL参数后的网址:", r.url)
    print ("设置URL参数后的网址的内容: \n", r.text)

    在这里插入图片描述
    原网址http://httpbin.org/get内容:
    在这里插入图片描述
    设置URL参数后的网址http://httpbin.org/get?k1=v1&k2=v2内容:
    在这里插入图片描述
    可以发现我们设置的参数内容已经加进了网页的内容中。

    2、自定义请求头

    (1)怎么找请求头?

    以找谷歌浏览器的请求头为例:

    进入谷歌浏览器在页面右键 > 检查 > 选择network
    在这里插入图片描述
    在name栏中任意选择一项
    例如我这里选择第一项:
    在这里插入图片描述在新出现的菜单栏中选择headers > request headers
    在这里插入图片描述
    滑到最下面出现的user-agent即为谷歌浏览器的请求头
    在这里插入图片描述
    查看其它浏览器的请求头与上述方法相似!!!

    (2)自定义请求头

    import requests #导入requests库
    
    #更改请求头
    headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36',#伪装为谷歌浏览器
    
    #使用requests.get()函数获取指定网页的内容,返回的是一个response相应对象(里面存储了服务器相应的内容)
    r = requests.get('https://www.csdn.net/', headers=headers) #获取目标网页内容
    
    print("服务器内容使用的文本编码:",r.encoding)
    print("状态响应码:",r.status_code)#返回200,表示请求成功;返回4xx,表示客户端错误;返回5xx,表示服务器错误响应。
    print("服务器响应的内容:\n",r.text)
    }

    在这里插入图片描述
    由上图可知我们成功的爬取了目标网页的内容。

    展开全文
  • 从前面初学爬虫(二):爬取静态网页之(3)自定义requests——设置传递URL(网络地址)参数and自定义请求头怎么找+怎么做)中已经讲解过通过get函数设置传递URL(网络地址)参数来实现get请求。 但是get函数存在...

    1、发送POST请求

    从前面初学爬虫(二):爬取静态网页之(3)自定义requests——设置传递URL(网络地址)参数and自定义请求头(怎么找+怎么做)中已经讲解过通过get函数设置传递URL(网络地址)参数来实现get请求。

    但是get函数存在两个问题:

    1. get函数无法实现发送一些编码为表单形式的数据
    2. get函数用在登录时,会直接将密码(或其他隐私内容)显示在URL中,这样十分不安全

    post请求就能很好的解决上述get请求存在的两个问题。

    话不多说,直接上实例:

    未将字典传递给data参数时:

    import requests #导入requests库
    
    r = requests.post('http://httpbin.org/post') #未将字典传递给data参数
    print (r.text)

    在这里插入图片描述
    可以发现表单中是没有数据的

    import requests #导入requests库
    
    key_dict = {'key1': 'value1', 'key2': 'value2'} #构建字典
    r = requests.post('http://httpbin.org/post', data=key_dict) #将字典传递给data参数
    print ("发送POST请求后的网址:", r.url)
    print (r.text)

    在这里插入图片描述

    可以发现网页内容中有了我们设置的表单形式数据,且发送POST请求后的网址并未发生变化。

    2、超时处理

    爬虫程序在发出爬取请求后,就会开始等待服务器的响应返回,但有时可能存在服务器一直不返回的情况,这样爬虫程序就会一直等待,造成时间的浪费和效率的降低。

    针对上述情况,可以使用timeout参数来解决:若服务器在timeout设置的时间内没有响应,就会返回异常,一般将其设置为20秒。

    下面用一段程序来为大家展示抛出的异常长什么样子:

    import requests
    link = "https://www.csdn.net/" 
    r = requests.get(link, timeout= 0.0001)#设置时间为0.0001秒查看异常

    异常:在这里插入图片描述

    展开全文
  • 刷着微信,玩着手机,发现自己的微信头像该换了,就去网上了一下头像,看着图片,自己就想着作为一个码农,可以把这些图片都爬取下来做成一个微信小程序,说干就干,了解一下基本都知道怎么做了,整理分享一波给...
        

    前言

    周末自己在家闲着没事,刷着微信,玩着手机,发现自己的微信头像该换了,就去网上找了一下头像,看着图片,自己就想着作为一个码农,可以把这些图片都爬取下来做成一个微信小程序,说干就干,了解一下基本都知道怎么做了,整理分享一波给大家。

    目录:

    • 安装node,并下载依赖
    • 搭建服务
    • 请求我们要爬取的页面,返回json

    安装node
    我们开始安装node,可以去node官网下载node下载地址,下载完成后运行node使用,

       node -v

    安装成功后会出现你所安装的版本号。

    接下来我们使用node, 打印出hello world,新建一个名为index.js文件输入
    console.log('hello world')
    运行这个文件

    node index.js

    就会在控制面板上输出hello world
    搭建服务器
    新建一个·名为node的文件夹
    首先你需要下载express依赖

    npm install express 

    在新建一个名为demo.js的文件
    目录结构如图:
    图片描述
    在demo.js引入下载的express

    const express = require('express');
    const app = express();
    app.get('/index', function(req, res) {
    res.end('111')
    })
    var server = app.listen(8081, function() {
        var host = server.address().address
        var port = server.address().port
        console.log("应用实例,访问地址为 http://%s:%s", host, port)
    
    })

    运行node demo.js简单的服务就搭起来了,如图:
    图片描述
    请求我们要爬取的页面
    首先下载需要的依赖

    npm install superagent
    npm install superagent-charset
    npm install cheerio

    superagent 是用来发起请求的,是一个轻量的,渐进式的ajax api,可读性好,学习曲线低,内部依赖nodejs原生的请求api,适用于nodejs环境下.,也可以使用http发起请求
    superagent-charset防止爬取下来的数据乱码,更改字符格式
    cheerio为服务器特别定制的,快速、灵活、实施的jQuery核心实现.。
    安装完依赖就可以引入了

    var superagent = require('superagent');
    var charset = require('superagent-charset');
    charset(superagent);
    const cheerio = require('cheerio');

    引入之后就请求我们的地址,https://www.qqtn.com/tx/weixi...

    const baseUrl = 'https://www.qqtn.com/'

    这些设置完之后就是发请求了,接下来请看完整代码demo.js

    var superagent = require('superagent');
    var charset = require('superagent-charset');
    charset(superagent);
    var express = require('express');
    var baseUrl = 'https://www.qqtn.com/'; //输入任何网址都可以
    const cheerio = require('cheerio');
    var app = express();
    app.get('/index', function(req, res) {
        //设置请求头
        res.header("Access-Control-Allow-Origin", "*");
        res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
        res.header("Access-Control-Allow-Headers", "X-Requested-With");
        res.header('Access-Control-Allow-Headers', 'Content-Type');
        //类型
        var type = req.query.type;
        //页码
        var page = req.query.page;
        type = type || 'weixin';
        page = page || '1';
        var route = `tx/${type}tx_${page}.html`
            //网页页面信息是gb2312,所以chaeset应该为.charset('gb2312'),一般网页则为utf-8,可以直接使用.charset('utf-8')
        superagent.get(baseUrl + route)
            .charset('gb2312')
            .end(function(err, sres) {
                var items = [];
                if (err) {
                    console.log('ERR: ' + err);
                    res.json({ code: 400, msg: err, sets: items });
                    return;
                }
                var $ = cheerio.load(sres.text);
                $('div.g-main-bg ul.g-gxlist-imgbox li a').each(function(idx, element) {
                    var $element = $(element);
                    var $subElement = $element.find('img');
                    var thumbImgSrc = $subElement.attr('src');
                    items.push({
                        title: $(element).attr('title'),
                        href: $element.attr('href'),
                        thumbSrc: thumbImgSrc
                    });
                });
                res.json({ code: 200, msg: "", data: items });
            });
    });
    var server = app.listen(8081, function() {
    
        var host = server.address().address
        var port = server.address().port
    
        console.log("应用实例,访问地址为 http://%s:%s", host, port)
    
    })

    运行demo.js就会返回我们拿到的数据,一个简单的node爬虫就完成了,如图:
    1652dd838e956f0a?imageslim
    希望可以到 项目node爬虫 上点一个 star 作为你对这个项目的认可与支持,谢谢。

    展开全文
  • 设置请求头 User-Agent代表用的哪个请求的浏览器就访问的页面 那么怎么找呢(以我用的火狐为例) 首先对网页按下F12,出现 点击网络(network),随便点一个链接,在将旁边的滑块滑到最底就会发现ua了。 例子第一天有...

    爬虫学习笔记(三)
    urllib库:

    1. 学会伪装
      现在有很多网站不让程序直接对上面的内容进行访问,如果发现是程序,站点就不会产生响应
    • 设置请求头
      User-Agent代表用的哪个请求的浏览器就访问的页面
      那么怎么找呢(以我用的火狐为例)
      首先对网页按下F12,出现
      在这里插入图片描述点击网络(network),随便点一个链接,在将旁边的滑块滑到最底就会发现ua了。
      在这里插入图片描述例子第一天有写。
      还有referer,服务器会识别headers中的referer是不是它自己,如果不是,有的服务器不会响应。所以我们可以这样写:
    headers = { 
             'User-Agent' : User-Agent().random,
             'Referer':'http://xxx.com' 
              } 
    

    使用多个ua的问题:

    import urllib.request
    import random
    ualist = [
    #ie
      "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)",
      "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)",
      "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)",
      "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)",
      #firefox
      "Mozilla/5.0 (Windows; U; Windows NT 5.2) Gecko/2008070208 Firefox/3.0.1",
      "Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070309 Firefox/2.0.0.3",
      "Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070803 Firefox/1.5.0.12",
      #opera
      "Opera/9.27 (Windows NT 5.2; U; zh-cn)",
      "Opera/8.0 (Macintosh; PPC Mac OS X; U; en)",
      "Mozilla/5.0 (Macintosh; PPC Mac OS X; U; en) Opera 8.0" ,
      #chrome
      "Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13 ",
      #Safari
      "Mozilla/5.0 (Windows; U; Windows NT 5.2) AppleWebKit/525.13 (KHTML, like Gecko) Version/3.1 Safari/525.13",
      "Mozilla/5.0 (iPhone; U; CPU like Mac OS X) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/4A93 Safari/419.3",
      #Navigator
      "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.12) Gecko/20080219 Firefox/2.0.0.12 Navigator/9.0.0.6",
      #360se
      "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; 360SE)"
    
    ]
    user_agent = random.choice(ua_list)
    request = urllib.request.Request("http://www.baidu.com")
    request.add_header("User-Agent",user_agent)
    print(request.get_header("User-agent"))
    

    ua来源于http://www.361way.com/ieua/692.html

    • 设置代理proxy
      假如对某一个网站一直访问,网站它会检测到你在最近使用该IP 的访问次数,如果访问次数过多,它会禁止你的访问。
      所以我们就会采取使用代理ip来访问,隔一小会就换,隔一小会就换,这样ip就不会被禁掉了。
      例:
    from urllib.request import ProxyHandler,build_opener
    proxy = ProxyHandler({"http": "119.109.197.195:80"})
    opener = build_opener(proxy)
    url = "http://www.baidu.com"
    response = opener.open(url)
    print(response.read().decode("utf-8"))
    
    展开全文
  • blob对象或Arraybuffer对象 自从HTML5提供了video标签,在网页中播放视频已经变成一个非常简单的事,只要一个video标签,src...其原理就是在访问资源时,请求头会带上发起请求的页面地址,判断其不存在(表示直接访问图
  • 某个工作日的下午,一个前端小伙伴我说:“我的线上的页面原来是好好的,今天访问的时候怎么变成了下载了,我什么都没做呀?”正在这时,又有人反馈所有的web网页访问的时候都变成下载了。 经过紧急的排查,发现...
  • ctf总结.md

    2019-05-14 14:22:02
    flag:在请求头,响应头尝试实验室:key究竟在哪里呢? 302跳转的中转网页,burp抓包在HTTP history中本应该访问的网站链接(为了方便寻找可以先clear一下历史),简单方法用firefox右键查看元素的查看网络中找到...
  • 如果你不到该菜单,那是因为你还没启用 “系统参数设置” 的模块,左侧菜单“系统设置” --> “模块管理”,启用 “系统参数设置” 模块,然后F5刷新网页即可 tt_vet_open (开关类型) 头条/抖音审核的时候...
  • x-scan-v3.3-cn

    2013-09-23 21:36:56
    从结果中看到,这台服务器公开放了七个端口,主要有21端口用于文件传输、80端口用于网页浏览、还有110端口用于pop3电子邮件,如此一来,我们就可以进行有关服务的漏洞扫描了。(关于端口的详细解释会在后续给出) 然后...
  • vc++ 开发实例源码包

    2014-12-16 11:25:17
    开始播放 | 显示时间 | | | ---开始和暂停 ----------- 下一曲------ -------------------------------------- Linux内核完全注释附 如题,我没看。 MFC+消息循环贴图---金山毒霸界面 自绘控件实现。 MFC...
  • 首页请求数据之后,根据热门度返回多个数据,将数据存储到list集合中,并且将它转换为JSON格式数据,返回到页面,页面解析数据并且显示。  商场则负责显示所有的商品数据,实现侧边栏点击指定的类别之后,显示对应...
  • vc++ 应用源码包_1

    热门讨论 2012-09-15 14:22:12
    然后获取文件,得到文件大小,然后再下载。重点函数是ThreadDownLoad。下载完之后用FileCombine合并文件。Mydownload.cpp底端的fnMyDownload函数是下载器的关键函数。 点对点多线程断点续传软件《传圣》源代码 ...
  • vc++ 应用源码包_2

    热门讨论 2012-09-15 14:27:40
    然后获取文件,得到文件大小,然后再下载。重点函数是ThreadDownLoad。下载完之后用FileCombine合并文件。Mydownload.cpp底端的fnMyDownload函数是下载器的关键函数。 点对点多线程断点续传软件《传圣》源代码 ...
  • vc++ 应用源码包_6

    热门讨论 2012-09-15 14:59:46
    然后获取文件,得到文件大小,然后再下载。重点函数是ThreadDownLoad。下载完之后用FileCombine合并文件。Mydownload.cpp底端的fnMyDownload函数是下载器的关键函数。 点对点多线程断点续传软件《传圣》源代码 ...
  • vc++ 应用源码包_5

    热门讨论 2012-09-15 14:45:16
    然后获取文件,得到文件大小,然后再下载。重点函数是ThreadDownLoad。下载完之后用FileCombine合并文件。Mydownload.cpp底端的fnMyDownload函数是下载器的关键函数。 点对点多线程断点续传软件《传圣》源代码 ...
  • vc++ 应用源码包_4

    热门讨论 2012-09-15 14:38:35
    然后获取文件,得到文件大小,然后再下载。重点函数是ThreadDownLoad。下载完之后用FileCombine合并文件。Mydownload.cpp底端的fnMyDownload函数是下载器的关键函数。 点对点多线程断点续传软件《传圣》源代码 ...
  • vc++ 应用源码包_3

    热门讨论 2012-09-15 14:33:15
    然后获取文件,得到文件大小,然后再下载。重点函数是ThreadDownLoad。下载完之后用FileCombine合并文件。Mydownload.cpp底端的fnMyDownload函数是下载器的关键函数。 点对点多线程断点续传软件《传圣》源代码 ...

空空如也

空空如也

1 2
收藏数 26
精华内容 10
关键字:

网页请求头怎么找