zoukankan      html  css  js  c++  java
  • 爬虫-爬取网页数据

    通过Python3.8 来写爬虫代码,获取网站信息

    爬虫库:requests    一般用于处理网络请求,获取html页面

    requests库的session会话对象可以跨请求保持某些参数。说白了,就是使用session成功的登录了某个网站,则在再次使用该session对象求求该网站的其他网页都会默认使用该session之前使用的cookie等参数

    在爬取页面的时候不能每一次请求就去登陆一下,这时需要用到保持会话的功能了,我们可以只登陆一次,然后保持这种状态去做其他的或者更多的请求

    # 请求参数
    payload = {'key1': 'value1', 'key2': 'value2'}
    
    # 添加请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.72 Safari/537.36 Edg/89.0.774.45'
    }
    
    # requests的会话对象
    sess = requests.session()
    
    # get请求
    r = requests.get("http://httpbin.org/get",params=payload, headers=headers)
    
    # post请求
    r = requests.post("http://httpbin.org/post", data=payload, headers=headers)
    
    # put请求
    r = requests.put("http://httpbin.org/put")
    
    # delete请求
    r = requests.delete("http://httpbin.org/delete")
    
    r = requests.head("http://httpbin.org/get")
    
    r = requests.options("http://httpbin.org/get")
    

      

      

    Beautifulsoup库  处理整个页面的html代码,从HTML或XML文件中提取数据

    Beautifulsoup中文文档:https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/#id14

    # 选用lxml解析器来解析
    soup = BeautifulSoup(html, 'lxml')
    
    # 获取标题
    print(soup.title)
    
    # 获取文本
    print(soup.title.text)
    
    # 通过标签定位    输出数组
    print(soup.find_all('a'))
    
    # 通过属性定位    输出数组
    print(soup.find_all(attrs={'id': 'link1'}))
    
    # 标签 + 属性定位   输出数组
    print(soup.find_all('a', id='link1'))
    
    # 输出文本
    print(soup.text)

    案例:爬取博客园首页文章信息

    import requests
    from bs4 import BeautifulSoup
    # 添加请求头
    headerss = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.72 Safari/537.36 Edg/89.0.774.45'
    }
    
    # 博客园的首页信息
    back1 = requests.get('https://www.cnblogs.com/', headers=headerss)
    
    
    # 通过Beautiful 获取html文本中的内容
    def query_info(back):
        soup = BeautifulSoup(back.text)
    
        # 调整html文本格式
        # print(soup.prettify())
    
        # 在文档中找到以div为标签的数据
        # print(soup.find_all('div'))
    
        # 通过div标签及属性进行寻找  返回一个数组     第一次寻找
        list = soup.find_all('div', {'class': 'post-item-text'})
    
        print('**********************************************************')
    
        for query in list:
            # 通过属性进行第二次寻找
            query_title = query.find_all(attrs={'class': 'post-item-title'})
            query_text = query.find_all('p')
            print("--------------------")
            # 输出文本
            print("标题:" + query_title[0].text.replace('
    ', ''))
            print("摘要:" + query_text[0].text.replace(' ', '').replace('
    ', ''))
            print("--------------------")
    
        print('**********************************************************')
    
    
    query_info(back1)
    
    # 读取博客园的下一页操作
    # 请求头
    header2 = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36',
        'referer': 'https://www.cnblogs.com/'
    }
    
    # 输入参数
    data1 = {
        "CategoryId": 808,
        "CategoryType": "SiteHome",
        "ItemListActionName": "AggSitePostList",
        "PageIndex": 2,
        "ParentCategoryId": 0,
        "TotalPostCount": 4000
    }
    
    # 建立一个会话
    sess = requests.session()
    
    # 访问首页,通过会话拿取cookie
    sess.get('https://www.cnblogs.com/', headers=header2)
    
    back2 = sess.post('https://www.cnblogs.com/AggSite/AggSitePostList', json=data1, headers=header2)
    
    query_info(back2)
    

      

     

  • 相关阅读:
    python学习日记——基本数据类型
    python学习日记——安装及初识
    STF平台探索
    fiddler基本操作梳理
    fly.js抛物线连续不断加入购物车
    判断是否存在某个字段hasOwnProperty
    vue中提示toFixed不是函数
    vue中父组件给子组件传值,子组件给父组件传值
    js判断用户的浏览器设备是移动端还是pc端
    css预处理器--sass学习($变量名)
  • 原文地址:https://www.cnblogs.com/pass-ion/p/14510670.html
Copyright © 2011-2022 走看看