我正在尝试从一个网站上抓取体育游戏的结果。该网站有所有游戏的结果,这是完美的,但他们在许多页面上。每个页面代表一天,我正在收集数据在许多个月的游戏,所以它将是相当多的网址进入。
我现在设置它的方法是,我有一个基本的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
发布于 2019-04-03 10:11:19
如果您确实希望在每一天都进行搜索,那么可以使用datetime
和timedelta
来迭代所有可能的日期。给它一个开始日期,然后可以一天一天地提前到结束日期(可以是今天的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轻松地提取链接。
https://stackoverflow.com/questions/55317655
复制相似问题