当前位置 博文首页 > 何妨吟啸且徐行:爬虫练习

    何妨吟啸且徐行:爬虫练习

    作者:[db:作者] 时间:2021-07-18 13:23

    小白爬虫学习之路···
    illegal multibyte sequence问题解决办法···

    爬虫练习(百度产品以及新浪新闻关键词)

    注:广搜索,细学习。

    一、百度产品网页
    打开网页之后呢,就进入百度产品的搜索页面了;
    网站首页

    # ------------------------------------------------1.导包
    import requests
    
    # -------------------------------------------------2.确定url
    start_url = 'https://www.baidu.com/more/'
    # ----------------------------------------------3.发送请求,获取响应
    response = requests.get(start_url)
    # -----------------------------------------------4.查看页面内容,可能出现乱码,查看编码格式。
    #print(response.text)
    #print(response.encoding)
    # 5.解决乱码
    # ---------------------------方法一:转换成utf-8格式
    # response.encoding='utf-8'
    # print(response.text)
    # -------------------------------方法二:解码为utf-8
    with open('index.html', 'w', encoding='utf-8') as fp:
        fp.write(response.content.decode('utf-8'))
    print(response.status_code)
    print(response.headers)
    print(type(response.text))
    print(type(response.content))
    
    

    二、新浪新闻——指定搜索内容的爬取

    import requests
    
    # ------------------爬取带参数的get请求-------------------爬取新浪新闻,指定的内容
    # 1.寻找基础url
    url = 'https://search.sina.com.cn/?'
    # 2.设置headers字典和params字典,再发请求
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36',
    }
    key = '李小龙'  # 搜索内容
    params = {
        'q': key,
        'c': 'news',
        'from': 'channel',
        'ie': 'utf-8'
    }
    response = requests.get(url, headers=headers, params=params)
    print(response.text)
    print(response.url)
    # 第二个参数 'w' 表示写入文件中的内容是字符串格式,所以要有第3个参数,指定写入字符串的编码。网页编码在<meta>标签中查看
    with open('sina_news.html', 'w', encoding='gbk',errors='ignore') as fp:
        # 写入文件的要对response对象进行二进制读取,之后再以对应编码进行解码
        fp.write(response.content.decode('utf-8'))
    

    get 方法是可以向服务器发送信息的,除了可以请求需要的页面之外,也可以发送我们指定的内容,这就是通过 params 参数实现的。
    request库 ----- get方法 ----- params
    这个 params 参数是字典结构,前面说到的 headers 其实也是字典结构,但它们传输的时候是以 json 的方式传输的~~~

    首先我们构建一个字典,里面写上我们想要发送的信息,网站会根据我们发送的内容返回对应的信息,但是获取到的不是网站源码。

    程序刚开始执行的时候呢报错如下:
    UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x99 in position 958: illegal multibyte sequence
    在网上搜索的,在open语句里面加入(errors=‘ignore’)就可以了,但是上面加入之后还报错,这个时候把write里面的编码格式"gbk"改为"utf-8",便不会报错了。(上面代码这里已改)
    打开响应的url页面,便可以看到最新的关于“李小龙”三字进行的搜索:
    关于李小龙三字在新浪新闻上的搜索

    天很冷,好冻手,我再看看params参数的使用···

    cs