初学python,记录学习过程。

新上榜,七日热门等同理。

此次主要为了学习python中对mongodb的操作,顺便巩固requests与BeautifulSoup。

点击,得到URL https://www.jianshu.com/trending/monthly?utm_medium=index-banner-s&utm_source=desktop

下拉,发现Ajax自动加载,F12观察请求。

Ajax的请求为:https://www.jianshu.com/trending/monthly?seen_snote_ids%5B%5D=20955828&seen_snote_ids%5B%5D=21427995&seen_snote_ids%5B%5D=20906269&seen_snote_ids%5B%5D=20703931&seen_snote_ids%5B%5D=21506894&seen_snote_ids%5B%5D=21763012&seen_snote_ids%5B%5D=20948499&seen_snote_ids%5B%5D=20513670&seen_snote_ids%5B%5D=21758606&seen_snote_ids%5B%5D=21619908&seen_snote_ids%5B%5D=21793770&seen_snote_ids%5B%5D=21478996&seen_snote_ids%5B%5D=20719357&seen_snote_ids%5B%5D=21136222&seen_snote_ids%5B%5D=20946853&seen_snote_ids%5B%5D=21893085&seen_snote_ids%5B%5D=21368495&seen_snote_ids%5B%5D=20917360&seen_snote_ids%5B%5D=21749782&seen_snote_ids%5B%5D=20641197&page=2

仔细观察发现中间存在众多重复的seen_snote_ids,不知啥用,那么去掉试试,将URL换成 https://www.jianshu.com/trending/monthly?page=2,发现OK,中间的seen_snote_ids参数对于请求结果没有影响,那么得到接口https://www.jianshu.com/trending/monthly?page=(1,2,3……),测试了下发现page=11就没了...并且一页加载20条文章。

OK,预习下mongodb在python中的操作。

1、需要用到 pymongo,怎么下载就不多说了,百度谷歌你看着办

2、开启mongodb,用配置文件启动。

顺便给出配置文件吧....

  1. #设置数据目录的路径
  2. dbpath = g:\data\db
  3. #设置日志信息的文件路径
  4. logpath = D:\MongoDB\log\mongodb.log
  5. #打开日志输出操作
  6. logappend = true
  7. #在以后进行用户管理的时候使用它
  8. noauth = true
  9. #监听的端口号
  10. port = 27017

3、在python中使用,给出我当初参考的博客,我觉得蛮清晰明了了点击打开链接

最后,给出源代码

  1. #爬取简书上三十日榜并存入数据库中 mongodb
  2. import pymongo
  3. import requests
  4. from requests import RequestException
  5. from bs4 import BeautifulSoup
  6. client = pymongo.MongoClient('localhost', 27017)
  7. db = client.jianshu  # mldn是连接的数据库名 若不存在则自动创建
  8. TABLENAME = 'top'
  9. def get_jianshu_monthTop(url):
  10. try:
  11. response = requests.get(url)
  12. if response.status_code ==200:
  13. return response.text
  14. print(url + ',visit error')
  15. return None
  16. except RequestException:
  17. return None
  18. def parse_html(html):
  19. base_url = 'https://www.jianshu.com'
  20. soup = BeautifulSoup(html, "html.parser")
  21. nickname = [i.string for i in soup.select('.info > .nickname')];
  22. span = soup.find_all('span',class_ = 'time')
  23. time = []
  24. for i in span:
  25. time.append(i['data-shared-at'][0:10])##截取,例2017-12-27T10:11:11+08:00截取成2017-12-27
  26. title = [i.string for i in soup.select('.content > .title')]
  27. url = [base_url+i['href'] for i in soup.select('.content > .title')]
  28. intro = [i.get_text().strip() for i in soup.select('.content > .abstract')]
  29. readcount = [i.get_text().strip() for i in soup.select('.meta > a:nth-of-type(1)')]
  30. commentcount = [i.get_text().strip() for i in soup.select('.meta > a:nth-of-type(2)')]
  31. likecount = [i.get_text().strip() for i in soup.select('.meta > span:nth-of-type(1)')]
  32. tipcount = [i.get_text().strip() for i in soup.select('.meta > span:nth-of-type(2)')]
  33. return zip(nickname,time,title,url,intro,readcount,commentcount,likecount,tipcount)
  34. #将数据存到mongodb中
  35. def save_to_mongodb(item):
  36. if db[TABLENAME].insert(item):
  37. print('save success:',item)
  38. return True
  39. print('save fail:',item)
  40. return False
  41. #将数据存到results.txt中
  42. def save_to_file(item):
  43. file = open('result.txt', 'a', encoding='utf-8')
  44. file.write(item)
  45. file.write('\n')
  46. file.close()
  47. def main(offset):
  48. url = """https://www.jianshu.com/trending/monthly?page=""" + str(offset)
  49. html = get_jianshu_monthTop(url)
  50. for i in parse_html(html):
  51. item = {
  52. '作者':i[0],
  53. '发布时间':i[1],
  54. '标题':i[2],
  55. 'URL':i[3],
  56. '简介':i[4],
  57. '阅读量':i[5],
  58. '评论量':i[6],
  59. '点赞量':i[7],
  60. '打赏量':i[8]
  61. }
  62. save_to_mongodb(item)
  63. save_to_file(str(item))
  64. if __name__ == '__main__':
  65. for i in range(1,11):
  66. main(i)

OK,最后给出效果图

TIPS:右键,新标签页打开图片,查看高清大图:)

抓了共157条数据。。。

python3 爬取简书30日热门,同时存储到txt与mongodb中的更多相关文章

  1. python2.7 爬取简书30日热门专题文章之简单分析_20170207

    昨天在简书上写了用Scrapy抓取简书30日热门文章,对scrapy是刚接触,跨页面抓取以及在pipelines里调用settings,连接mysql等还不是很熟悉,今天依旧以单独的py文件区去抓取数 ...

  2. Python爬取简书主页信息

    主要学习如何通过抓包工具分析简书的Ajax加载,有时间再写一个Multithread proxy spider提升效率. 1. 关键点: 使用单线程爬取,未登录,爬取简书主页Ajax加载的内容.主要有 ...

  3. Node爬取简书首页文章

    Node爬取简书首页文章 博主刚学node,打算写个爬虫练练手,这次的爬虫目标是简书的首页文章 流程分析 使用superagent发送http请求到服务端,获取HTML文本 用cheerio解析获得的 ...

  4. Scrapy+selenium爬取简书全站

    Scrapy+selenium爬取简书全站 环境 Ubuntu 18.04 Python 3.8 Scrapy 2.1 爬取内容 文字标题 作者 作者头像 发布日期 内容 文章连接 文章ID 思路 分 ...

  5. 【python3】爬取简书评论生成词云

    一.起因: 昨天在简书上看到这么一篇文章<中国的父母,大都有毛病>,看完之后个人是比较认同作者的观点. 不过,翻了下评论,发现评论区争议颇大,基本两极化.好奇,想看看整体的评论是个什么样, ...

  6. scrapy爬取简书整站文章

    在这里我们使用CrawlSpider爬虫模板, 通过其过滤规则进行抓取, 并将抓取后的结果存入mysql中,下面直接上代码: jianshu_spider.py # -*- coding: utf-8 ...

  7. 爬取简书图片(使用BeautifulSoup)

    import requests from bs4 import BeautifulSoup url_list = [] kv = {'User-Agent':'Mozilla/5.0'} r = re ...

  8. python 爬取简书评论

    import json import requests from lxml import etree from time import sleep url = "https://www.ji ...

  9. Python3爬取人人网(校内网)个人照片及朋友照片,并一键下载到本地~~~附源代码

    题记: 11月14日早晨8点,人人网发布公告,宣布人人公司将人人网社交平台业务相关资产以2000万美元的现金加4000万美元的股票对价出售予北京多牛传媒,自此,人人公司将专注于境内的二手车业务和在美国 ...

随机推荐

  1. Spark之standalone模式

    standalone hdfs:namenode是主节点进程,datanode是从节点进程 yarn:resourcemanager是主节点进程,nodemanager是从节点进程 hdfs和yarn ...

  2. MYSQL常用函数(类型转化函数)

    为了进行数据类型转化,MySQL提供了CAST()函数,它可以把一个值转化为指定的数据类型.类型有:BINARY,CHAR,DATE,TIME,DATETIME,SIGNED,UNSIGNED 示例: ...

  3. Asp.net core 学习笔记 ( Identity 之 Authentication )

    和从前的 identity 区别不是很大. 从 2.1 开始 vs 模板的 identity 都被封装了起来, 你几乎看不到任何一行代码, 需要向下面这样打开它, 才能做修改. 说一下比较常用的配置 ...

  4. spring cloud: Hystrix(四):feign类似于hystrix的断容器功能:fallback

    spring cloud: Hystrix(四):feign使用hystrix @FeignClient支持回退的概念:fallback方法,这里有点类似于:@HystrixCommand(fallb ...

  5. layui: 子iframe关闭/传值/刷新父页面

    https://www.cnblogs.com/jiqing9006/p/5135697.html layer iframe层的使用,传参   父层 <div class="col-x ...

  6. 20170821xlVBA隐藏空行

    Sub HideBlankRowsBetweenUsedRange() Dim URows As Range, i As Long, EndRow As Long With ActiveSheet E ...

  7. codeforces590b//Chip 'n Dale Rescue Rangers//Codeforces Round #327 (Div. 1)

    题意:从一点到另一点,前t秒的风向与t秒后风向不同,问到另一点的最短时间 挺难的,做不出来,又参考了别人的代码.先得到终点指向起点的向量,设T秒钟能到.如果T>t则受风1作用t秒,风2作用T-t ...

  8. webpack热更新

    文件地址:https://pan.baidu.com/s/1kUOwFkV 从昨天下午到今天上午搞了大半天终于把热更新搞好了,之前热更新有两个问题,第一个是不能保存表单状态.第二个是更新太慢,这次主要 ...

  9. confirm提示弹出确定和取消按钮

    js----> var con = confirm('这是一个确定加取消的提示窗口') if(con==true){ document.write("点击了确定按钮") }e ...

  10. vue中v-for和动态src问题及解决办法