我可以使用Python Beautiful Soup模块从站点提要URL中提取新闻项。但是假设该网站没有提要,我需要每天从中提取新闻文章,就好像它有一个提要。
网站https://www.jugantor.com/没有Feed。即使通过谷歌搜索,我也没有找到任何。使用以下代码段,我尝试从站点中提取链接。结果显示“http://epaper.jugantor.com”等链接。 但网站上显示的新闻项目也未包含在提取的链接中。
我的代码:
from bs4 import BeautifulSoup
from urllib.request import Request, urlopen
import re
def getLinks(url):
USER_AGENT = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5'
request = Request(url)
request.add_header('User-Agent', USER_AGENT)
response = urlopen(request)
content = response.read().decode('utf-8')
response.close()
soup = BeautifulSoup(content, "html.parser")
links = []
for link in soup.findAll('a', attrs={'href': re.compile("^http://")}):
links.append(link.get('href'))
return links
print(getLinks("https://www.jugantor.com/"))
显然这不符合预期目的。我每天都需要“https://www.jugantor.com/”的所有新闻文章链接,就像我从Feed中获取它们一样。我可以使用cron作业每天运行一个脚本。但挑战仍然是确定在特定日期发布的所有文章然后提取它们。
我该怎么做?任何python模块或算法等?
NB:存在一个类似的问题here,它没有提到作为解析源的Feed。似乎OP有关从列出的页面中提取文章它们作为文本快照。与该问题不同,我的问题主要集中在没有任何Feed的网站上。然而,那里存在的唯一答案并没有解决这个问题。
答案 0 :(得分:1)
我不确定理解正确,但我看到的第一件事是{'href': re.compile("^http://")}
。
您将错过所有https
和相关链接。可以在这里跳过亲属链接而没有任何问题(我猜......),但显然不是https
个。首先是:
{'href': re.compile("^https?://")}
然后,为了避免每天下载和解析相同的URL,您可以提取文章的ID(在https://www.jugantor.com/lifestyle/19519/%E0%...A7%87
id为19519
),将其保存在数据库中,因此首先验证是否在抓取页面之前存在id。
最后,我不确定这会有用,但是这个网址https://www.jugantor.com/todays-paper/让我觉得你应该只能找到今天的新闻。