DennyT

 

  临近毕业,学校要求写实习报告,自己写报告是不可能写的,肯定是抄啊,百度文库能给你白抄么,不会的,你要注册会员,要花银子才能复制他的文章,对于我们苦逼穷学生,就剩这点技术了,用python写了个爬虫,爬出来直接就可以在终端复制粘贴了,捐献给各位同胞食用!

# 百度文库信息爬取


import requests
import re
import json
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
    # print(response)
    result = re.search(
        r\'&md5sum=(.*)&sign=(.*)&rtcs_flag=(.*)&rtcs_ver=(.*?)".*rsign":"(.*?)",\', response, re.M | re.I)  # 寻找参数
    # print(result.group(1),result.group(2),result.group(3),result.group(4),result.group(5))
    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)
    # print("response.status_code:",response.status_code,"\n","response.url:",response.url,"\n","response.headers:",response.headers,"\n","response.cookies:",response.cookies)
    response = response.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)
    print(result)

if __name__ == \'__main__\':
    url = "" #这里写入想要爬取的文章URL,直接粘贴进来
    get_num(url)

  爬取效果图如下:

分类:

技术点:

相关文章:

  • 2021-11-15
  • 2021-04-09
  • 2021-11-18
  • 2021-08-13
  • 2021-10-08
  • 2021-12-31
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-07-18
  • 2021-10-01
  • 2022-12-23
  • 2021-06-02
  • 2021-08-15
相关资源
相似解决方案