Python3 爬取百度文库VIP文章

南昌航空大学.jpg

记得之前写毕业论文的时候总是会去看百度文库,里面还是有很多知识点值得我们去学习借鉴的。今天刚好项目没什么事、就去网上看了下别人怎么爬取的。自己再整理一下。发给大家一起借鉴

其实也没什么难的, 就是里面正则表达式需要自己去理解。iOS项目里面一般只是在验证手机号、判断网页Url的时候会用一下正则表达式,刚好也是技能学习,多了解一点总更好。

单独讲一下这个Demo里面的正则吧,具体的我还不是很了解,我也没深入研究这个东西

1、result返回的是括号里面的内容, 那么.*表示的应该是里面的一个任意长度的字符 直到.html停止
2、findAll 返回的是一个数组,所以这里我们拿的是[0] 数组里面的第一个元素
3、假设 url= 'hhwerwerwerview/42342341wr.html' 那么result= 42342341wr
result = re.findall('view/(.*).html', url)[0]
1、查找起始是title .*? 的意思是中间是任意长度的字符除换行符,\: 匹配的是\  好像所有的标点符号都用了反斜杠
2、结果是返回括号里面的值
3、假设 url = 'title3423qw:qwwer'1231434'  那么result= 1231434
result = re.findall(r"title.*?\:.*?\'(.*?)\'\,", content)[0]
1、这里面我也不是很懂 意思就是你需要匹配的字符串里面出现反斜杠的话\,需要用四个反斜杠
3、假设 url = 'https://14234235346456.html\x22'  那么result= https://14234235346456.html
url_list = re.findall('(https.*?0.json.*?)\\\\x22}', content)

import requests
import re
import json
import os

session = requests.session()


def fetch_url(url):

    return session.get(url=url).content.decode('gbk')
def get_doc_id(url):
    return re.findall('view/(.*).html', url)[0]
def parse_type(content):
    return re.findall(r"docType.*?\:.*?\'(.*?)\'\,", content)[0]
def parse_title(content):
    return re.findall(r"title.*?\:.*?\'(.*?)\'\,", content)[0]

def parse_doc(content):
    result = ''
    url_list = re.findall('(https.*?0.json.*?)\\\\x22}', content)  # 匹配\需要\\\\
    # https:\\\/\\\/wkbjcloudbos.bdimg.com\\\/v1\\\/docconvert4844\\\/\\\/wk\\\/7210afedd7358a5
    # bd48649cf6dad0de5\\\/0.json?responseCacheControl=max-age%3D3888000&responseExpires=Sat%2C
    # %2029%20Jun%202019%2014%3A56%3A28%20%2B0800&authorization=bce-auth-v1%2Ffa1126e91489401fa
    # 7cc85045ce7179e%2F2019-05-15T06%3A56%3A28Z%2F3600%2Fhost%2Fddebf898b7d5f21bffa6b06bbfc684
    # 1d2f89f574e32a5fa4edee8ffbff44e057&x-bce-range=0-16174&token=eyJ0eXAiOiJKSVQiLCJ2ZXIiOiIx
    # LjAiLCJhbGciOiJIUzI1NiIsImV4cCI6MTU1NzkwNjk4OCwidXJpIjp0cnVlLCJwYXJhbXMiOlsicmVzcG9uc2VDY
    # WNoZUNvbnRyb2wiLCJyZXNwb25zZUV4cGlyZXMiLCJ4LWJjZS1yYW5nZSJdfQ%3D%3D.bDk2fN4WA%2BfOAHAWSeT
    # UvfSu4xHnyKVQJ9LzqgqiOEg%3D.1557906988
    url_list = [addr.replace("\\\\\\/", "/") for addr in url_list]  # 将 url上的\\\转换成\
    for url in url_list:
        content = fetch_url(url)
        y = 0
        txtlists = re.findall('"c":"(.*?)".*?"y":(.*?),', content)
        for txt in txtlists:

            if not y == txt[1]:
                n = '\n'
            else:
                n = ''
            result += n
            result += txt[0].encode('utf-8').decode('unicode_escape', 'ignore')
            y = txt[1]
    return result

def parse_txt(doc_id):
    pass

def save_file(filename, content):

    with open(filename, 'w', encoding='utf8') as f:
        f.write(content)
        print('已保存为:'+ filename)
def main():

    # input(str('请输入要下载的文库URL....\n'))
    url = 'https://wenku.baidu.com/view/aa31a84bcf84b9d528ea7a2c.html'
    content = fetch_url(url)
    doc_id = get_doc_id(url)
    type = parse_type(content)
    title = parse_title(content)
    if type == 'doc':
        result = parse_doc(content)
        save_file(title+'.txt', result)

    pass

if __name__ == '__main__':


    main()

结果


image.png

好了、也没什么别的了。逻辑上来说的话就是简单。难的就是刚入门的人来说,不了解每个函数的作用,带参问题。 还有一个难点,就是在解析网页的时候需要知道怎么解析得到你想要的数据

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354