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再进行替换了。

  • 相关阅读:
    如何在EXCEL SHEET中 动态添加控件
    和菜鸟一起学OK6410之ADC模块
    和菜鸟一起学证券投资之消费物价指数CPI
    和菜鸟一起学证券投资之股市常见概念公式2
    作为软件工程师,你必须知道的20个常识
    和菜鸟一起学c++之虚函数
    和菜鸟一起学单片机之入门级led流水灯
    在国内各大软件下载网站上,“万能数据库查询分析器”已更新至 2.02 版本
    和菜鸟一起学证券投资之股市简单财务分析
    和菜鸟一起学OK6410之蜂鸣器buzzer字符驱动
  • 原文地址:https://www.cnblogs.com/cknightx/p/7616238.html
Copyright © 2011-2022 走看看