Python 爬取CSDN的极客头条
(点击上方公众号,可快速关注一起学Python)
工具
分析
使用浏览器调试面板分析网页结构以及网络请求,容易知道,每一个头条信息结构如图所示
因此,我们可以通过
第二次的为:
也就是说,初始加载更多数据的时候,
代码
推荐阅读
看完本文有收获?请转发分享给更多人
关注「Python那些事」,做全栈开发工程师
来源:IMyxuan 链接:
https://segmentfault.com/a/1190000012124539
如有好Python相关文章欢迎投稿至lansebolang2008@163.com
原创转载均可,转载稿请获取作者授权转载
工具
Python
Python:requests
Python:BeautifulSoup
分析
使用浏览器调试面板分析网页结构以及网络请求,容易知道,每一个头条信息结构如图所示
因此,我们可以通过
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那些事」,做全栈开发工程师