美文网首页
万物皆可爬-Python爬虫实现突破百度文库限制

万物皆可爬-Python爬虫实现突破百度文库限制

作者: 悦悦学Python | 来源:发表于2021-08-18 14:56 被阅读0次

    爬取目标

    网址:百度文库

    工具使用

    开发工具:pycharm
    开发环境:python3.7, Windows10使用工具包:requests,re

    重点学习内容

  1. 获取网址数据
  2. 正则提取数据
  3. 保存文本数据
  4. 项目思路解析

    找到自己需要的文库资料这篇文章主要介绍的如何处理复制限制的问题

    在做一个爬虫项目之前首先要知道数据的来源,以及数据的加载方式
    当前网页数据为加载得到的数据
    需要通过抓包的方式提取对应数据打卡抓包工具进行数据找寻

    数据来自一个json文件保存的数据采c字段里面
    找到目标数据之后在找寻数据资源地址的加载方式要知道数据是从哪里加载过来的

    通过搜索关键字的方式找到数据的来源
    通过搜索到数据其实是前端页面自带的
    加载之后的数据需要从文章页面提取出所有的数据下载地址

    对文章首页发送网络请求通过正则的方式提取出所有的数据下载地址

    def get_url(self):        url = "https://wenku.baidu.com/view/d19a6bf4876fb84ae45c3b3567ec102de3bddf82.html"        headers = {            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',            'Accept-Encoding': 'gzip, deflate, br',            'Accept-Language': 'zh-CN,zh;q=0.9',            'Cache-Control': 'max-age=0',            'Connection': 'keep-alive',            'Host': 'wenku.baidu.com',            'Sec-Fetch-Dest': 'document',            'Sec-Fetch-Mode': 'navigate',            'Sec-Fetch-Site': 'same-origin',            'Sec-Fetch-User': '?1',            'Upgrade-Insecure-Requests': '1',            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'        }        response = self.session.get(url=url,headers=headers)        json_data = re.findall('"json":(.*?}])', response.text)[0]        json_data = json.loads(json_data)        # print(json_data)        for index, page_load_urls in enumerate(json_data):            # print(page_load_urls)            page_load_url = page_load_urls['pageLoadUrl']            # print(index)            self.get_data(index, page_load_url)

    需要取出对应数据的下标,以及所有的文章数据来源地址
    再次对文章片段数据发送请求
    获取到对应json数据
    通过正则的方式先将wenku_1里的json数据全部取出来
    在取出body下面所以的列表在取出所以的C键对应的值

    格式可自行调整最后将数据进行保存

    简易源码分享

    import requestsimport reimport jsonclass WenKu():    def __init__(self):        self.session = requests.Session()    def get_url(self):        url = "https://wenku.baidu.com/view/23de0cea793e0912a21614791711cc7930b778d4.html"        headers = {            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',            'Accept-Encoding': 'gzip, deflate, br',            'Accept-Language': 'zh-CN,zh;q=0.9',            'Cache-Control': 'max-age=0',            'Connection': 'keep-alive',            'Host': 'wenku.baidu.com',            'Sec-Fetch-Dest': 'document',            'Sec-Fetch-Mode': 'navigate',            'Sec-Fetch-Site': 'same-origin',            'Sec-Fetch-User': '?1',            'Upgrade-Insecure-Requests': '1',            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'        }        response = self.session.get(url=url,headers=headers)        json_data = re.findall('"json":(.*?}])', response.text)[0]        json_data = json.loads(json_data)        # print(json_data)        for index, page_load_urls in enumerate(json_data):            # print(page_load_urls)            page_load_url = page_load_urls['pageLoadUrl']            # print(index)            self.get_data(index, page_load_url)    def get_data(self, index, url):        headers = {            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',            'Accept-Encoding': 'gzip, deflate, br',            'Accept-Language': 'zh-CN,zh;q=0.9',            'Cache-Control': 'max-age=0',            'Connection': 'keep-alive',            'Host': 'wkbjcloudbos.bdimg.com',            'Sec-Fetch-Dest': 'document',            'Sec-Fetch-Mode': 'navigate',            'Sec-Fetch-Site': 'none',            'Sec-Fetch-User': '?1',            'Upgrade-Insecure-Requests': '1',            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'        }        response = self.session.get(url=url,headers=headers)        # print(response.content.decode('unicode_escape'))        data = response.content.decode('unicode_escape')        comand = 'wenku_' + str(index+1)        json_data = re.findall(comand + "\((.*?}})\)", data)[0]        # print(json_data)        json_data = json.loads(json_data)        result = []        for i in json_data['body']:            data = i["c"]            # print(data)            result.append(data)        print(''.join(result).replace('   ', '\n'))        with open('疫情防控.txt', 'a', encoding='utf-8')as f:            f.write(''.join(result).replace("   ", '\n'))if __name__ == '__main__':    wk = WenKu()    wk.get_url()

    我是白又白i,一名喜欢分享知识的程序媛❤️

    如果没有接触过编程这块的朋友看到这篇博客,发现不会编程或者想要学习的,可以直接留言+私我呀~【非常感谢你的点赞、收藏、关注、评论,一键四连支持】

    相关文章

      网友评论

          本文标题:万物皆可爬-Python爬虫实现突破百度文库限制

          本文链接:https://www.haomeiwen.com/subject/ldpgbltx.html