寻找更好的解决方案,用beautifulsoup刮掉多个网页

问题描述 投票:0回答:1

我试图从网站上刮掉体育比赛的结果。该网站拥有所有游戏的所有结果,这是完美的,但它们在很多页面上。每个页面代表一天,我在几个月的游戏中收集数据,所以进入的网址会很多。

我现在设置它的方式是我有一个基本URL,以及我可以使用for循环追加的日期列表。这种方式工作正常,但我很好奇,如果有更好的方法,我进入许多日期,我将要刮。

    url = 'http://www.url.com?'

    #this list would hold hundreds of dates
    dates = ['month=11&day=1&year=2016', 'month=11&day=2&year=2016', ...]

    for i in dates:
        page = requests.get(url+i)
        soup = BeautifulSoup(page.text, 'html.parser')

    #and so on, this part works as intended
python beautifulsoup
1个回答
0
投票

如果你真的希望每一天搜索,那么datetimetimedelta可以用来迭代所有可能的日子。给它一个开始日期,然后可以一次提前一天,直到结束日期(今天可能是datetime.now()):

from datetime import datetime, timedelta

base_url = "http://www.url.com?month={}&day={}&year={}"

search_date = datetime(2016, 11, 1)
end_date = datetime(2017, 1, 1)
one_day = timedelta(days=1)

while search_date < end_date:
    url = base_url.format(search_date.month, search_date.day, search_date.year)
    print(url)

    page = requests.get(url)
    soup = BeautifulSoup(page.text, 'html.parser')

    search_date += one_day

这会给你一些类似的东西:

http://www.url.com?month=11&day=1&year=2016
http://www.url.com?month=11&day=2&year=2016
http://www.url.com?month=11&day=3&year=2016
http://www.url.com?month=11&day=4&year=2016
.
.
.
http://www.url.com?month=12&day=29&year=2016
http://www.url.com?month=12&day=30&year=2016
http://www.url.com?month=12&day=31&year=2016

更好的方法是使用页面上的next链接。为此,需要实际页面的URL。然后可以使用BeautifulSoup轻松提取链接。

© www.soinside.com 2019 - 2024. All rights reserved.