如何使用网络抓取工具打印出页面上的所有标题?

时间:2016-12-13 20:23:24

标签: python-3.x pycharm

我正在尝试编写一个应用程序,它显示了前往城镇的公交车的时间表。你能帮我吗?

这是我写的,但它不起作用(我只想要页面上的标题或“时间”);

import requests
from bs4 import BeautifulSoup

def RuterBuss(max_pages):
    page = 1
    while page <= max_pages:
        url = 'https://ruter.no/reiseplanlegger/Mellom/Fra/(2190085)
            %C3%98ster%C3%A5s%20senter%20(B%C3%A6rum)/til/(3010200)Majorstuen
            %20%5bT-bane%5d%20(Oslo)/etter/#st:0,sp:0,bp:0' + str(page)
        source_code = requests.get(url)
        plain_text = source_code.text
        soup = BeautifulSoup(plain_text, "html.parser")
        for link in soup.findAll('span', {'class':'route-list__title ng-binding'}):
            title = link.string
            print(title)
        page += 1

RuterBuss(1)

结果是:

Process finished with exit code 0

正如我所说,我希望公共汽车去的时间。你能看到我忘记或做错了吗

1 个答案:

答案 0 :(得分:0)

原因是你的输出是

Process finished with exit code 0

基本上是因为您的代码没有达到任何打印语句。

更详细地说,这意味着soup变量是while循环的第一个(也是唯一一个)迭代的空列表。

无论如何,我已经查看了您在脚本中使用的页面,我认为由于页面是通过AngularJS呈现的,因此您无法获取信息。事实上,我试图以这种方式改变你的for循环:

for link in soup.findAll('strong'):

因为我已经分析了来源,所需信息在<strong>元素中可用,但结果如下:

{{travel.routeName}}
{{travel.formattedDepartureTime}} – {{travel.formattedArrivalTime}}
{{deviation.heading}}
{{deviation.heading}}
{{remark.heading}}
{{deviation.heading}}

我有另一个想法,就是在浏览器的开发者工具(控制台)中搜索,如果有任何XHR或JS来获取所请求的信息,可能是通过json,但我没有找到任何东西。