无聊写了个豆瓣日记的小爬虫,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>','\n')
text=text.replace('<p>','')
text=text.replace('</p>','\n')
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('\n')
f.write(diary[1])
f.write('\n')
f.write(diary[2])
f.write('\n---------------------------------\n') print('写入成功')

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

Python 豆瓣日记爬取的更多相关文章

  1. Python 豆瓣mv爬取

    爬取网址:https://www.dbmeinv.com/       豆瓣mv(现已更名) 注:自制力不好的同学,先去准备营养快线! import requests from bs4 import ...

  2. python豆瓣250爬取

    import requests from bs4 import BeautifulSoup from lxml import etree # qianxiao996精心制作 #博客地址:https:/ ...

  3. Python登录豆瓣并爬取影评

    上一篇我们讲过Cookie相关的知识,了解到Cookie是为了交互式web而诞生的,它主要用于以下三个方面: 会话状态管理(如用户登录状态.购物车.游戏分数或其它需要记录的信息) 个性化设置(如用户自 ...

  4. Python爬虫之爬取慕课网课程评分

    BS是什么? BeautifulSoup是一个基于标签的文本解析工具.可以根据标签提取想要的内容,很适合处理html和xml这类语言文本.如果你希望了解更多关于BS的介绍和用法,请看Beautiful ...

  5. Python爬虫之爬取淘女郎照片示例详解

    这篇文章主要介绍了Python爬虫之爬取淘女郎照片示例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 本篇目标 抓取淘宝MM ...

  6. [python] 常用正则表达式爬取网页信息及分析HTML标签总结【转】

    [python] 常用正则表达式爬取网页信息及分析HTML标签总结 转http://blog.csdn.net/Eastmount/article/details/51082253 标签: pytho ...

  7. [Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)

    转载自:http://blog.csdn.net/eastmount/article/details/51231852 一. 文章介绍 源码下载地址:http://download.csdn.net/ ...

  8. 如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)

    前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...

  9. from appium import webdriver 使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium)

    使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium) - 北平吴彦祖 - 博客园 https://www.cnblogs.com/stevenshushu/p ...

随机推荐

  1. eclipse创建的maven项目中使用javafx

    类似普通maven项目,不需要特地创建javafx项目. 将fxml资源文件放在resource目录下即可.

  2. 常见天气api

    1. 心知天气API1.1 免费版:400次/小时,也就是9600次/天.国内城市数据,天气实况,3天预报,6项生活指数.这个API的免费版已经提供了很多年了,应该算最长寿稳定的那批API了……1.2 ...

  3. centos出现“FirewallD is not running”

    最近在服务器centos上安装了rdis数据库,默认是不开启远端访问功能,需要设置一下防火墙,在开放默认端口号 8888时提示FirewallD is not running,经过排查发现是防火墙就没 ...

  4. sql(Oracle)优化之索引

    原文:https://www.cnblogs.com/oraclestudy/articles/5779210.html 建立索引的目的是:l 提高对表的查询速度:l 对表有关列的取值进行检查. 注意 ...

  5. JavaWeb学习篇--Filter过滤器

    Filter过滤器简介 ServletAPI中提供了一个Filter接口,开发web应用时,如果编写的 java 类实现了这个接口,则把这个java类称之为过滤器Filter. WEB服务器每次在调用 ...

  6. springMVC数据模型model,modelmap,map,@ModelAttribute的相互关系

    结论: a.注解方法中形参为model,modelmap,map一个或几个时,他们指向的引用对象相同即他们的值相同. b.当使用@ModelAttribute注解请求参数时,springmvc自动将该 ...

  7. JVM老年代和新生代的比例

    在 Java 中,堆被划分成两个不同的区域:新生代 ( Young ).老年代 ( Old ).新生代 ( Young ) 又被划分为三个区域:Eden.From Survivor.To Surviv ...

  8. linux crontab 保证php守护进程运行

    写好php脚本.建议定期检测内存占用,核心逻辑就不写了.这个跟业务有关. if(memory_get_usage()>100*1024*1024){ exit(0);//大于100M内存退出程序 ...

  9. day29-序列化 json、pickle、shelve

    1.pickle和JSON序列化 如果我们想用文本文件保存一个 Python 对象怎么操作?这里就涉及到序列化的问题,序列化指的是将原本的字典.列表等内容转换成一个字符串的过程. 2.为什么要使用序列 ...

  10. vue:vue引入组建的多种写法

    vue的路由组件中,引入模块的两种写法:(@等价于..)死的写法:不是按需加载1:import Index from '@/components/Index'(import Index from '. ...