python爬虫爬取百度文档

使用python爬虫爬取百度文档文字

话不多说,直接上代码!

import requests
import re

headers = {
    "User-Agent": "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Mobile Safari/537.36"
}  # 模拟手机

def get_num(url):
    response = requests.get(url, headers=headers).text
    result = re.search(
        r'&md5sum=(.*)&sign=(.*)&rtcs_flag=(.*)&rtcs_ver=(.*?)".*rsign":"(.*?)",', response, re.M | re.I)  # 寻找参数
    reader = {
        "md5sum": result.group(1),
        "sign": result.group(2),
        "rtcs_flag": result.group(3),
        "rtcs_ver": result.group(4),
        "width": 176,
        "type": "org",
        "rsign": result.group(5)
    }
    result_page = re.findall(
        r'merge":"(.*?)".*?"page":(.*?)}', response)  # 获取每页的标签
    doc_url = "https://wkretype.bdimg.com/retype/merge/" + url[29:-5]  # 网页的前缀
    n = 0
    for i in range(len(result_page)):  # 最大同时一次爬取10页
        if i % 10 is 0:
            doc_range = '_'.join([k for k, v in result_page[n:i]])
            reader['pn'] = n + 1
            reader['rn'] = 10
            reader['callback'] = 'sf_edu_wenku_retype_doc_jsonp_%s_10' % (
                reader.get('pn'))
            reader['range'] = doc_range
            n = i
            get_page(doc_url, reader)
    else:  # 剩余不足10页的
        doc_range = '_'.join([k for k, v in result_page[n:i + 1]])
        reader['pn'] = n + 1
        reader['rn'] = i - n + 1
        reader['callback'] = 'sf_edu_wenku_retype_doc_jsonp_%s_%s' % (
            reader.get('pn'), reader.get('rn'))
        reader['range'] = doc_range
        get_page(doc_url, reader)

def get_page(url, data):
    response = requests.get(url, headers=headers, params=data).text
    response = response.encode(
        'utf-8').decode('unicode_escape')  # unciode转为utf-8 然后转为中文
    response = re.sub(r',"no_blank":true', '', response)  # 清洗数据
    result = re.findall(r'c":"(.*?)"}', response)  # 寻找文本匹配
    result = '\n'.join(result)
    with open("C:/Users/86135/Desktop/百度文库.txt",'wt') as f:
        f.write(result)

if __name__ == '__main__':
    url = input("请输入百度文库的地址:")
    get_num(url)

爬取结果如下:
在这里插入图片描述

Python爬虫抓取百度文库的内容通常需要借助第三方库,如`pyquery`, `requests`, 和 `selenium` 等。因为百度文库有反机制,特别是对于部分内容,可能会有登录验证、动态加载等复杂情况。以下是基本步骤: 1. **安装依赖**: 首先需要安装所需的Python库,你可以使用pip进行安装: ``` pip install requests beautifulsoup4 pyquery selenium webdriver_manager ``` 2. **模拟请求**: 使用`requests`获取基础HTML内容,如果遇到需要登录或验证码的情况,可以使用`selenium`配合浏览器驱动来完成。 3. **解析网页**: 使用`BeautifulSoup`或`PyQuery`解析HTML文档,定位到包含你需要的数据的部分,例如文章标题、链接等。 4. **数据提取**: 根据页面结构找到特定数据并保存,这可能涉及CSS选择器或XPath表达式。 5. **处理动态加载**: 如果某些内容是在用户交互后加载的,需要编写JavaScript代码来模拟点击或者等待加载完成。 6. **异常处理**: 考虑到网络状况和百度文库的反策略,设置合理的错误处理和重试机制。 7. **遵守规则**: 爬虫操作一定要遵守网站的Robots协议,并尊重版权法律,不要用于非法用途。 请注意,实际操作时可能会因为百度文库的具体页面结构变动而有所调整。同时,频繁的爬取可能会触发百度的反机制导致IP受限甚至封禁。建议使用合适的频率,并采取代理IP、设置User-Agent等措施提高隐蔽性。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值