【发布时间】:2020-07-19 03:03:26
【问题描述】:
我正在尝试接收下一页上的网址列表
https://sport-tv-guide.live/live/tennis
收集这些 URL 后,我需要将每个 URL 传递给一个抓取函数以抓取并输出相关的匹配数据。
如果特定页面上只有一个匹配项,则数据正确输出,例如 - https://sport-tv-guide.live/live/darts(见下面的输出)
当我使用包含多个链接的页面时会出现问题,例如 - https://sport-tv-guide.live/live/tennis ,似乎 URL 被正确抓取(通过使用 print 来确认打印 URL),但它们似乎没有正确传递要抓取的内容,因为脚本只是静默失败(请参阅下面的输出)
代码如下:
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 列表?
感谢任何可以建议或帮助解决此问题的人。
【问题讨论】:
-
两个网址之间的页面布局完全不同
-
谢谢@bigbounty。我已经检查并确认了这一点。当我找到共同元素时,所有链接都可以正常工作。如果您想为此创建一个答案,我可以接受它作为正确答案并点赞。
-
我已经发布了答案。投票并接受答案
标签: python web-scraping beautifulsoup