zoukankan      html  css  js  c++  java
  • Python 豆瓣日记爬取

    无聊写了个豆瓣日记的小爬虫,requests+bs4。
    cookies_src可填可不填,主要是为了爬取仅自己可见的日记。
    url填写的是日记页面,即https://www.douban.com/people/***/notes

    import requests
    import re
    from bs4 import BeautifulSoup
    
    # cookies
    cookies_src=''
    
    # 日记页面
    url=''
    
    def parse_cookies(str):
        str_tmp=str.replace(' ','')
        str_list=str.split(';')
        cookies={}
        for item in str_list:
            item_list=item.split('=')
            key=item_list[0]
            value=item_list[1]
            cookies[key]=value
        return cookies
    
    def get_html(url,cookies):
        r=requests.get(url,cookies=cookies)
        return r.text
    
    # 解析日记页面,提取出标题,时间,内容
    def parse_diary(src):
        soup=BeautifulSoup(web_html,'html.parser')
        note_container=soup.find('div','note-container')
        title=note_container.find('div','note-header note-header-container').h1.text
        time=note_container.find('span','pub-date').text
        content=''
        contents=note_container.find('div',id='link-report')
        text=str(contents).replace('<br>','
    ')
        text=text.replace('<p>','')
        text=text.replace('</p>','
    ')
        text=text.replace('<div class="note" id="link-report">','')
        text=text.replace('</div>','')
        content=content+text
        return (title,time,content)
    
    
    cookies=parse_cookies(cookies_src)
    
    # 提取处所有日记链接
    next_page=url
    diarys_link=[]
    page_num=1
    while True:
        print("正在获取第%d页的日记链接..."%page_num)
        web_html=get_html(next_page,cookies)
        soup=BeautifulSoup(web_html,'html.parser')
        # 将当前页面的日记链接保存于diarys_link中
        for rr in soup.find_all('div','rr'):
            diarys_link.append(rr.a['href'])
        try: # 到达最后一页
            next_page=soup.find('span','next').a['href']
        except:
            break
        page_num=page_num+1
    
    # 解析每条日记
    print('逐条解析日记...')
    diarys=[]
    num=1
    for diary in diarys_link:
        web_html=get_html(diary,cookies)
        diarys.append(parse_diary(web_html))
        print('已解析:%d'%num)
        num=num+1
    
    # 写入文件
    print('写入文件中...')
    with open('./diary.txt','w') as f:
        for diary in diarys:
            f.write(diary[0])
            f.write('
    ')
            f.write(diary[1])
            f.write('
    ')
            f.write(diary[2])
            f.write('
    ---------------------------------
    ')
    
    print('写入成功')
    

    关于日记内容的处理部分,本来是可以直接用.text来获取的,但<br><p>标签均被过滤掉,原文中的换行符就没了,所以只能转换成str再进行替换了。

  • 相关阅读:
    ubuntu12.04 死机 卡屏 画面冻结解决方案
    Install Firefox 20 in Ubuntu 13.04, Ubuntu 12.10, Ubuntu 12.04, Linux Mint 14 and Linux Mint 13 by PPA
    ListView1.SelectedItems.Clear()
    android studio 下载地址
    jquery.slider.js jquery幻灯片测试
    jquery.hovermenu.js
    jquery.tab.js选项卡效果
    适配 placeholder,jquery版
    jquery.autoscroll.js jquery自动滚动效果
    将 Google Earth 地图集成到自己的窗体上的 简单控件
  • 原文地址:https://www.cnblogs.com/cknightx/p/7616238.html
Copyright © 2011-2022 走看看