Python - Beautifulsoup - 从要抓取的列表中传递单个 url

我正在尝试接收下一页上的网址列表

https://sport-tv-guide.live/live/tennis

收集到这些 URL 后,我需要将每个 URL 传递给一个抓取函数,以抓取并输出相关的匹配数据。

如果特定页面上只有一个匹配项,则数据会正确输出,例如 - https://sport-tv-guide.live/live/darts(见下面的输出)

http://img3.mukewang.com/6412e4ef0001b73d03100037.jpg

当我使用一个包含多个链接的页面时会出现此问题,例如 - https://sport-tv-guide.live/live/tennis,似乎正在正确抓取 URL(使用打印确认,打印URLS),但它们似乎没有正确传递给要抓取的内容,因为脚本只是默默地失败了(见下面的输出)

http://img3.mukewang.com/6412e4f8000178cb06210125.jpg

代码如下:


import requests

from bs4 import BeautifulSoup


def makesoup(url):

    cookies = {'mycountries' : '101,28,3,102,42,10,18,4,2'}

    r = requests.post(url,  cookies=cookies)

    return BeautifulSoup(r.text,"lxml")

   

def linkscrape(links):

    baseurl = "https://sport-tv-guide.live"

    urllist = []

    

    for link in links:

        finalurl = (baseurl+ link['href'])

        urllist.append(finalurl)

        # print(finalurl)

        

    for singleurl in urllist:

        soup2=makesoup(url=singleurl)

        print(singleurl)

        g_data=soup2.find_all('div', {'class': 'main col-md-4 eventData'})

        for match in g_data:

            hometeam =  match.find('div', class_='cell40 text-center teamName1').text.strip()

            awayteam =  match.find('div', class_='cell40 text-center teamName2').text.strip()

            dateandtime = match.find('div', class_='timeInfo').text.strip()

            print("Match ; " + hometeam + "vs" +  awayteam) 

            print("Date and Time; ", dateandtime) 



            

def matches():

    soup=makesoup(url = "https://sport-tv-guide.live/live/tennis")

    linkscrape(links= soup.find_all('a', {'class': 'article flag',  'href' : True}))

    

我假设问题是,当有多个 URL 时,它们将作为一个大字符串而不是单独的 URL 传递,但我不确定如何让它一次只传递 URL 列表中的每个 URL被刮掉?


感谢任何可以提供建议或帮助解决此问题的人。


斯蒂芬大帝
浏览 165回答 1
1回答

catspeake

分析链接后,2个链接指向不同布局的不同页面。https://sport-tv-guide.live/live/tennis - 当您获得所有链接时使用此链接,它们指向不同的页面布局。https://sport-tv-guide.live/live/darts - 此页面中的链接指向此布局。如果您需要从https://sport-tv-guide.live/live/tennis的所有链接中抓取数据,可以使用以下脚本。import requestsfrom bs4 import BeautifulSoupdef makesoup(url):    cookies = {'mycountries' : '101,28,3,102,42,10,18,4,2'}    print(url)    r = requests.post(url,  cookies=cookies)    return BeautifulSoup(r.text,"lxml")   def linkscrape(links):    baseurl = "https://sport-tv-guide.live"    urllist = []        for link in links:        finalurl = baseurl + link['href']        urllist.append(finalurl)            for singleurl in urllist:        soup2=makesoup(url=singleurl)        g_data=soup2.find('div', {'class': 'eventData'})        try:            teams = g_data.find_all("div", class_=["row","mb-5"])                        print("HomeTeam - {}".format(teams[0].find("div", class_="main col-md-8 col-wrap").text.strip()))            print("AwayTeam - {}".format(teams[1].find("div", class_="main col-md-8 col-wrap").text.strip()))            channelInfo = g_data.find("div", {"id":"channelInfo"})            print("Time - {}".format(channelInfo.find("div", class_="time full").text.strip()))            print("Date - {}".format(channelInfo.find("div", class_="date full").text.strip()))        except :            print("Data not found")def matches():    soup=makesoup(url = "https://sport-tv-guide.live/live/tennis")    linkscrape(links=soup.find_all('a', {'class': 'article flag',  'href' : True}))matches()注意:我已经放了try/except,因为从页面获得的链接没有相同的布局。输出:https://sport-tv-guide.live/live/tennishttps://sport-tv-guide.live/event/live-tennis-national-tennis-centre-roehampton?uid=191007191100Data not foundhttps://sport-tv-guide.live/event/bett1-aces-berlin/?uid=71916304HomeTeam - Tommy Haas - Roberto Bautista-AgutAwayTeam - Dominic Thiem - Jannik SinnerTime - 11:15Date - Sunday, 07-19-2020https://sport-tv-guide.live/event/bett1-aces-berlin/?uid=71916307HomeTeam - Tommy Haas - Roberto Bautista-AgutAwayTeam - Dominic Thiem - Jannik SinnerTime - 14:00Date - Sunday, 07-19-2020https://sport-tv-guide.live/event/bett1-aces-berlin/?uid=17207191605HomeTeam - Tommy Haas - Roberto Bautista-AgutAwayTeam - Dominic Thiem - Jannik SinnerTime - 14:05Date - Sunday, 07-19-2020https://sport-tv-guide.live/event/world-teamtennis/?uid=161707191630102Data not found
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python