网络爬虫-基本使用(代码片段)

jr-xiaojian jr-xiaojian     2023-04-18     754

关键词:

get请求

    get请求的基本使用

    // 1. 打开浏览器,创建HttpClient对象    
    CloseableHttpClient httpClient = HttpClients.createDefault();
    
    // 2.输入网址,发起get请求创建HttpGet对象
    HttpGet get = new HttpGet("http://112.124.1.187/index.html?typeId=16");
    
    // 3.发情请求,返回响应,使用HttpClient对象发起请求
    CloseableHttpResponse response = httpClient.execute(get);
    
    // 4.解析响应,获取数据
    if(response.getStatusLine().getStatusCode() == 200)
        HttpEntity entity = response.getEntity();
        String content = EntityUtils.toString(entity,"utf-8");
        System.out.println(content);
    

 

    get请求带参数(可以直接写在地址后,但是构成硬编码)

    // 1. 打开浏览器,创建HttpClient对象
    CloseableHttpClient httpClient = HttpClients.createDefault();
    try 
        // 地址:http://112.124.1.187/index.html?typeId=16.带有参数
        // 创建URIBuilder
        URIBuilder uriBuilder = new URIBuilder("http://112.124.1.187/index.html");
        // 添加参数
        // 多个参数可以连着添加,在后面连着setParameter(key,value)
        uriBuilder.setParameter("typeId","16");
        // 2.输入网址,发起get请求创建HttpGet对象
        HttpGet get = new HttpGet(uriBuilder.build());
        // 3.发情请求,返回响应,使用HttpClient对象发起请求
        CloseableHttpResponse response = null;
        try 
            response = httpClient.execute(get);
            // 4.解析响应,获取数据
            if(response.getStatusLine().getStatusCode() == 200)
                HttpEntity entity = response.getEntity();
                String content = EntityUtils.toString(entity,"utf-8");
                System.out.println(content);
            
         catch (IOException e) 
            e.printStackTrace();
        
     catch (URISyntaxException e) 
        e.printStackTrace();
    

 

post请求

    基本使用与get相同把HttpGet改为HttpPost就可以了。

    post请求带参数

    // 1. 打开浏览器,创建HttpClient对象
    CloseableHttpClient httpClient = HttpClients.createDefault();
    
    // 地址:http://112.124.1.187/index.html?typeId=16.带有参数
    // 2.输入网址,发起post请求创建HttpPost对象
    HttpPost post = new HttpPost("http://112.124.1.187/index.html");
    // 2.1 声明List集合,封装表单中的参数
    List<NameValuePair> params = new ArrayList<>();
    // 2.2 添加参数
    params.add(new BasicNameValuePair("typeId","16"));
    // 2.3 创建表单的Entity对象,对参数进行url编码
    UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(params,"utf-8");
    // 2.4 设置表单的Entity对象到Post请求中
    post.setEntity(formEntity);
    
    // 3.发情请求,返回响应,使用HttpClient对象发起请求
    CloseableHttpResponse response = null;
    try 
        response = httpClient.execute(post);
        // 4.解析响应,获取数据
        if(response.getStatusLine().getStatusCode() == 200)
            HttpEntity entity = response.getEntity();
            String content = EntityUtils.toString(entity,"utf-8");
            System.out.println(content);
        
     catch (IOException e) 
        e.printStackTrace();
     finally
        if(response != null)
            response.close();
        
        httpClient.close();
    

 

像每一个连接操作一样,HttpClent 连接一次,再断开,再要用时,继续连接,再断开。构成浪费资源现象。需要用到 "池" 这个概念。

HttpClient-连接池

    public static void     main(String[] args) 
        // 创建连接池管理器
        PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
        // 设置最大连接数
        cm.setMaxTotal(10);
        // 设置每个主机最大连接数
        cm.setDefaultMaxPerRoute(2);
    
        // 使用连接池管理器发起请求
        doGet(cm);
        doGet(cm);
    
    
    private static void doGet(PoolingHttpClientConnectionManager cm) 
        // 从连接池中获取HttpClient对象
        CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(cm).build();
    
        HttpGet httpGet = new HttpGet("http://112.124.1.187");
        CloseableHttpResponse response = null;
        try 
            response = httpClient.execute(httpGet);
            if(response.getStatusLine().getStatusCode() == 200)
                String content = EntityUtils.toString(response.getEntity(),"utf-8");
                System.out.println(content.length());
            
         catch (IOException e) 
            e.printStackTrace();
         finally
            if(response != null)
                try 
                    response.close();
                 catch (IOException e) 
                    e.printStackTrace();
                
            
            // 不用关闭HttpClient,交由池来管理
            // httpClient.close();
        
    

 

请求参数

    这个请求参数不是放在url地址后面的参数,而是你在请求过程中,所涉及到需要事先定好的规则。比如,在请求过程中,有时候因为网络原因,或目标服务器的原因,请求需要更长的时间才能完成,就需要我们自定义相关的时间。

    HttpGet get =     new HttpGet("http://112.124.1.187/index.html?typeId=16");
    // 配置请求信息
    RequestConfig config = RequestConfig.custom().setConnectTimeout(10000)  // 创建连接的最长时间,单位是毫秒
                            .setConnectionRequestTimeout(500)   // 设置获取连接的最长时间,单位是毫秒
                            .setSocketTimeout(10 * 1000)    // 设置数据传输的最长时间,单位是毫秒
                            .build();
    // 将配置给请求
    get.setConfig(config);

 

网络爬虫基本练习(代码片段)

0.可以新建一个用于练习的html文件,在浏览器中打开。1.利用requests.get(url)获取网页页面的html文件 importrequestsnewsurl=‘http://news.gzcc.cn/html/2018/xiaoyuanxinwen_0328/9113.html‘ res=requests.get(newsurl)res.encoding=‘utf_ 查看详情

网络爬虫基本练习(代码片段)

1.取出h1标签的文本importrequestsre=requests.get(‘http://news.gzcc.cn/html/2018/xiaoyuanxinwen_0328/9113.html‘)re.encoding=‘utf-8‘print(re)print(re.text)print(soup.h1.text)2.取出a标签的链接soup.a.attrs.get(‘href‘)3. 查看详情

网络爬虫基本练习(代码片段)

<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>SimpleDOMDemo</title></head><body><h1>Thisisthedocumentbody</h1><PID="p1No 查看详情

urllib爬虫(流程+案例)(代码片段)

  网络爬虫是一种按照一定规则自动抓取万维网信息的程序。在如今网络发展,信息爆炸的时代,信息的处理变得尤为重要。而这之前就需要获取到数据。有关爬虫的概念可以到网上查看详细的说明,今天在这里介绍一下使用... 查看详情

爬虫基本原理讲解(代码片段)

...个基本的梳理,以便大家掌握爬虫的基本思路,爬虫即为网络资源数据获取,用一句话概括就是:请求网站并提取数据的自动化程序爬虫的基本流程分为四步:在第一二步Request和Response是爬虫的获取阶段比较重要的两个概念,我... 查看详情

爬虫基本原理(代码片段)

一、爬虫是什么  1、什么是互联网  互联网是网络设备(网络、路由器、交换机、防火墙等等)和一台台计算机连接而成,像一张网一样。  2、互联网建立的目的  互联网的核心价值在于数据的共享/传递:数据是存放... 查看详情

python爬虫之scrapy框架,基本介绍使用以及用框架下载图片案例(代码片段)

...量的代码,就能够快速的抓取。Scrapy使用了Twisted异步网络框架来处理网络通信,可以加快我们的下载速度,不用自己去实现异步框架,并且包含了各种 查看详情

基础网络爬虫(webcrawler)相关技术浅析(代码片段)

...eniumPythonurllibrequestsScrapyPyspiderJavaWebMagicWebCollector技术分析网络请求获取请求浏览器开发者工具浏览器插件网络抓包工具请求认证拷贝认证认证请求模拟认证验证码IP限制UA限制流量限制请求签名请求加密流程控制多线程并发内容... 查看详情

基础网络爬虫(webcrawler)相关技术浅析(代码片段)

...eniumPythonurllibrequestsScrapyPyspiderJavaWebMagicWebCollector技术分析网络请求获取请求浏览器开发者工具浏览器插件网络抓包工具请求认证拷贝认证认证请求模拟认证验证码IP限制UA限制流量限制请求签名请求加密流程控制多线程并发内容... 查看详情

〖python网络爬虫实战⑨〗-正则表达式基本原理(代码片段)

...op100入围,荣获多家平台专家称号。 最近更新〖Python网络爬虫实战⑥〗-多线程和多进程〖Python网络爬虫实战⑦〗-requests的使用(一)〖Python网络爬虫实战⑧〗-requests的使用(二)上节回顾        我们已... 查看详情

爬虫--scrapy框架的基本使用(代码片段)

流程框架安装Scrapy:  (1)在pycharm里直接就可以进行安装Scrapy       (2)若在conda里安装scrapy,需要进入cmd里输入指令condainstallscrapy Scrapy框架的搭建1、先创建scrapy工程scrapystartprojectquotetutorial在pycharm里的Terminal里... 查看详情

爬虫库requests和beautifulsoup的基本使用(代码片段)

爬虫获取数据总体上可以分为两步:获取网页主要用到requests(发送网页请求)selenium(使用浏览器访问网页)解析网页主要用到BeautifulSoup下面将简单介绍上面三个库的使用requests从URL中得到网页使用pipinstallrequests安装使用importreque... 查看详情

爬虫之resquests模块的使用(代码片段)

 RequestsRequests模块Requests模块是一个用于网络访问的模块,其实类似的模块有很多,比如urllib,urllib2,httplib,httplib2,他们基本都提供相似的功能。在上一篇我们已经使用urllib模块而Requests会比urllib更加方便,可以节约我们大... 查看详情

python爬虫详解(代码片段)

python爬虫详解1、基本概念1.1、什么是爬虫  网络爬虫,是一种按照一定规则,自动抓取互联网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。随着网络的迅速发展,万维网... 查看详情

python爬虫编程思想:实战案例:抓取所有的网络资源(代码片段)

...博客文章列表         到现在为止,我们已经对网络爬虫涉及到的基本知识有了一个初步的了解。本文会编写一个简单的爬虫应用,以便让读者对爬虫有一个基本的认识。本节要编写的爬虫属于全网爬虫类别,但... 查看详情

python爬虫之scrapy框架,基本介绍使用以及用框架下载图片案例(代码片段)

...量的代码,就能够快速的抓取。Scrapy使用了Twisted异步网络框架来处理网络通信,可以加快我们的下载速度,不用自己去实现异步框架,并且包含了各种中间件接口,可以灵活地实现各种需求。Scrapy可以应用在... 查看详情

网络爬虫beautifulsoup库的使用(代码片段)

使用BeautifulSoup库提取HTML页面信息#!/usr/bin/python3importrequestsfrombs4importBeautifulSoupurl=‘http://python123.io/ws/demo.html‘r=requests.get(url)ifr.status_code==200:print(‘网络请求成功‘)demo=r.textsoup=Beautif 查看详情

《爬虫学习》(urllib库使用)(代码片段)

urllib库是Python中一个最基本的网络请求库。可以模拟浏览器的行为,向指定的服务器发送一个请求,并可以保存服务器返回的数据。1.urlopen函数:在Python3的urllib库中,所有和网络请求相关的方法,都被集到urllib.request模块下面了... 查看详情