Pyhton爬取百度文库文字写入word文档

本文详细介绍了如何使用Python requests库爬取百度文库的Word文档,并将数据写入Word或文本文件。重点讲解了headers的设置和分页爬取技术,展示了从URL请求到数据处理的完整代码示例。
摘要由CSDN通过智能技术生成

介绍

仅支持爬取百度文库的Word文档,文字写入Word文档或者文本文件(.txt),主要使用Python爬虫的requests库。
requests库是Python爬虫系列中请求库比较热门和便捷实用的库,另外urlib库(包)也是比较热门的。除此之外Python爬虫系列还有解析库lxml以及Beautiful Soup,Python爬虫框架scrapy。

请求网址

        介绍一下headers的使用方法、及分页爬取,headers里面一般情况下其实只要User-Agent就够了。

def get_url(self):
        url = input("请输入下载的文库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': '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)

爬取数据

        获取服务器响应爬取文档数据写入Word文档,也可以将with open(‘百度文库.docx’, ‘a’, encoding=‘utf-8’)中的.docx改成.txt文本文件,这样写入的就是文本文件了,写入目前还没添加换行功能!

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'))
        print("")
        with open('百度文库.docx', 'a', encoding='utf-8') as f:
            f.write('')
            f.write(''.join(result).replace('    ', '\n'))

完整代码

import requests
import re
import json

class WenKu():
    def __init__(self):
        self.session = requests.Session()

    def get_url(self):
        url = input("请输入下载的文库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': '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'))
        print("")
        with open('百度文库.docx', 'a', encoding='utf-8') as f:
            f.write('')
            f.write(''.join(result).replace('    ', '\n'))

if __name__ == '__main__':
    wk = WenKu()
    wk.get_url()
Python爬取网页数据的过程可以分为以下几个步骤: 1. 定义起始URL和爬取页数:在编写爬虫程序时,可以通过设置起始URL和爬取的页数来指定需要爬取的网页范围。例如,在编写spiders.py文件时,可以设置start_urls列表,其中包含需要爬取的网页URL,如['https://www.lagou.com/zhaopin/Python/' + str(x) for x in range(1, 22)]。这样可以通过循环爬取指定页数的网页。 2. 发起HTTP请求并获取网页源代码:利用Python的requests库,可以发起HTTP请求,获取网页的源代码。在获取源代码时,可以使用requests库的get()方法,并设置verify参数为False以忽略https的安全警告。获取到的网页源代码可以保存为文件或者使用后续的解析工具进行处理。 3. 解析网页源代码:如果需要获取网页中的特定数据,可以使用解析工具如BeautifulSoup来解析网页源代码。通过解析工具,可以提取出需要的数据,如岗位名称、薪资水平、招聘单位、工作地点、工作经验、学历要求等。例如,在items.py文件中,可以使用Scrapy框架提供的字段定义,定义需要保存的数据字段。 4. 数据清洗和分析:在获取到数据后,可以对数据进行清洗和处理。根据具体需求,可以使用Python中的各种数据处理和分析库对数据进行清洗、筛选、聚合等操作。例如,可以使用pandas库进行数据清洗和处理,使用matplotlib或者seaborn库进行数据可视化。 5. 存储数据:最后,可以将数据存储到适当的存储介质中,如MongoDB数据库。可以使用Python的MongoDB库来连接数据库,并将清洗和处理后的数据存储到指定的集合中。 综上所述,通过编写Python爬虫程序,可以从指定的招聘网站上爬取数据,并将数据存入MongoDB数据库中,然后进行数据清洗、分析和可视化等操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [pyhton爬取拉勾网数据保存到MongoDB](https://blog.csdn.net/xiangminghan/article/details/107331314)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [Pyhton爬取数据的方法总结](https://blog.csdn.net/new_buff_007/article/details/107347026)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北岛末巷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值