python - 爬虫获取页面链接,求问如何判断是最新的链接?
黄舟
黄舟 2017-04-18 09:46:23
0
4
314

小弟想做一个自动转发网站新闻的微博机器人作为python练手项目。
我知道需要api对接、需要爬取网站的新闻链接和标题。
但是如何只提取最新的新闻呢?
以下是按照我的要求过滤后,输出所有新闻的代码:

bar = soup.find_all('li', attrs={'data-label': True})
news = len(bar)
for i in range(news):
    if u'巴塞罗那' in bar[i]['data-label'].split(','):
        print bar[i]

我想提取过滤后列表里的第一条:print bar .
但提取后会反复显示len(bar)次,而且跳过过滤规则,请问如何解决?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

Antworte allen(4)
伊谢尔伦

你是在爬取直播吧吧

可以设置一个变量lasttime记录上次爬取的时间

from datetime import datetime

#type datetime
lasttime

bar = soup.find_all('li', attrs={'data-label': True})
news = len(bar)
for i in range(news):
    d = datetime.strptime(bar[i].text[-19:], "%Y-%m-%d %H:%M:%S")
    if u'巴塞罗那' in bar[i]['data-label'].split(',') and d > lasttime:
        print bar[i]
阿神

其实这个问题很普遍,就是判重。首先需要给每条新闻加一个唯一的标志, 比如说时间戳,或者在直播吧里面的连接方式:"http://news.zhibo8.cc/zuqiu/2016-10-18/5805df3d3422f", 你就可以取:

20161018-5805df3d3422f

作为新闻的唯一ID,或者更加严格的,加上足球的标志,比如为0:

0-20161018-5805df3d3422f

有了唯一ID, 就好办多了,方式很多,比如说,在内存中,维护一个列表, 里面按顺序存放当前页面的新闻的id,然后下次再爬取页面,那么页面上的新的新闻就是当前列表中第一个id之后的新闻。 然后再更新列表。可以把旧新闻从列表里面删除,比如新加入了n个新闻,那么就把最后n个新闻删除掉。无论空间还是时间,都蛮不错的。
还有想保存新闻的话, 那就每次把删除的新闻存到数据库。

迷茫

新闻网页不都有时间字段么?

大家讲道理

你的目的是想提取最新的新闻并且其中要包含你设置的关键字吧!!其实最简单你可以设置time.sleep(60),一分钟后再重新抓取网页数据,不就可以得到最新的新闻了吗?还有你的问题信息量太少,

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!