·设为首页收藏本站📧邮箱修改🎁免费下载专区💎积分✅卡密📒收藏夹👽聊天室
DZ插件网 门户 站长资讯 查看内容

Python 爬取CSDN的极客头条

2024-10-10 21:43| 发布者: 独家记忆| 查看: 86512| 评论: 0

摘要: (点击上方公众号,可快速关注一起学Python)来源:IMyxuan 链接:https://segmentfault.com/a/1190000012124539如有好Python相关文章欢迎投稿至lansebolang2008@163.com原创转载均可,转载稿请获取作者授权转载工具 ...
(点击上方公众号,可快速关注一起学Python)


来源:IMyxuan    链接:

https://segmentfault.com/a/1190000012124539

如有好Python相关文章欢迎投稿至lansebolang2008@163.com

原创转载均可,转载稿请获取作者授权转载


工具


  • Python


  • Python:requests

  • Python:BeautifulSoup


分析

使用浏览器调试面板分析网页结构以及网络请求,容易知道,每一个头条信息结构如图所示

Python 爬取CSDN的极客头条251 作者: 来源: 发布时间:2024-10-10 21:43

因此,我们可以通过 dd.tracking-ad > span > a定位元素,同时,根据Network面板的网络请求分析,第一次加载更多数据的请求为
http://geek.csdn.net/service/news/get_news_list?from=-&size=20&type=HackCount
第二次的为:
http://geek.csdn.net/service/news/get_news_list?from=6:245113&size=20&type=HackCount

上述请求已精简,删除了原有请求的部分参数

也就是说,初始加载更多数据的时候,from参数为-,后续的请求,from是前一次请求所返回来的值,因此,我们可以用Python爬取数据了

代码
# -*- coding: UTF-8 -*-
from bs4 import BeautifulSoup
import requests
import time

classCS:
   def__init__(self):
       # self.username = username
       pass

   defgeek(self, _from=None, type='HackCount', size=20):
       """
       url: http://geek.csdn.net/,
       more: http://geek.csdn.net/service/news/get_news_list?from=-&size=20&type=HackCount
       :param _from: 加载更多的时候的标志
       :param type: 极客头条的类型
       :param size: 每页的数目
       :return:
       """
       start = '-'
       if _from:
           timestamp = int(time.time())
           url = 'http://geek.csdn.net/service/news/get_news_list?' \
                 'from=%s&size=%d&type=%s&_=%d' % (_from, size, type, timestamp)
           req = requests.get(url)
           js = req.json()
           start = js['from']
           soup = BeautifulSoup(js['html'], 'lxml')
       else:
           url = 'http://geek.csdn.net/'
           req = requests.get(url)
           soup = BeautifulSoup(req.content, 'lxml')
       results = soup.select('dd.tracking-ad > span > a')
       items = []
       for result in results:
           item = {
               'href': result['href'],
               'title': result.string
           }
           items.append(item)
       return {
           'from': start,
           'items': items
       }

cs = CS()
items = []
_from = ''
i = 0
# 这里控制获取多少页的内容
while i < 10:
   result = cs.geek(_from=_from)
   items.extend(result['items'])
   _from = result['from']
   i = i + 1
print(items)


推荐阅读


  • 一道微软面试题

  • 如何计算钱币找零问题?

  • 一文读懂连接池技术原理、设计与实现

  • 力荐!Python的14张思维导图


看完本文有收获?请转发分享给更多人

关注「Python那些事」,做全栈开发工程师





上一篇:白帽子的辛酸谁能懂?
下一篇:【优惠剩余4天】瓦克、白云、美适雅、新展、汉高等有机硅名企纷纷相约第25届有机硅精细化学品技术交流会!

鲜花

握手

雷人

路过

鸡蛋

评论

您需要登录后才可以发表言论 登录立即注册
创宇盾启航版免费网站防御网站加速服务
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:3.149.25.109,GMT+8, 2024-11-22 08:00 , Processed in 0.537117 second(s), 43 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2024 Discuz! Team.

关灯
扫一扫添加微信客服
QQ客服返回顶部
返回顶部