从特定网址上刮下链接
这是我的第一个问题,如果我解释了任何错误,请原谅我。从特定网址上刮下链接
我想从python中的特定网站抓取url,并将链接解析为csv。事情是当我在BeautifulSoup解析网站我无法提取网址,因为当我在Python中解析它时,我只能得到<div id="dvScores" style="min-height: 400px;">\n</div>,
并且没有在该分支下。但是,当我打开控制台并复制链接所在的表格并将其粘贴到文本编辑器时,它会粘贴600页的html。我想要做的是编写一个显示链接的for循环。 html的结构如下:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
#shadow-root (open)
<head>...</head>
<body>
<div id="body">
<div id="wrapper">
#multiple divs but i don't need them
<div id="live-master"> #what I need is under this div
<span id="contextual">
#multiple divs but i don't need them
<div id="live-score-master"> #what I need is under this div
<div ng-app="live-menu" id="live-score-rightcoll">
#multiple divs but i don't need them
<div id="left-score-lefttemp" style="padding-top: 35px;">
<div id="dvScores">
<table cellspacing=0 ...>
<colgroup>...</colgroup>
<tbody>
<tr class="row line-bg1"> #this changes to bg2 or bg3
<td class="row">
<span class="row">
<a href="www.example.com" target="_blank" class="td_row">
#I need to extract this link
</span>
</td>
#Multiple td's
</tr>
#multiple tr class="row line-bg1" or "row line-bg2"
.
.
.
</tbody>
</table>
</div>
</div>
</div>
</div>
</span>
</div>
</div>
</body>
</html>
我在做什么错了?我需要为python自动化一个系统,而不是将html粘贴到文本并用正则表达式提取链接。 我的Python代码如下也是:
import requests
from bs4 import BeautifulSoup
r=requests.get("http://example.com/example")
c=r.content
soup=BeautifulSoup(c,"html.parser")
all=soup.find_all("span",id="contextual")
span=all[0].find_all("tbody")
本网站使用JavaScript来填充它的内容,因此,你不能获得通过beautifulsoup网址。如果您在浏览器中检查网络选项卡,则可以发现this link。它包含你所需要的所有数据。你可以简单地解析它并提取所有需要的值。
import requests
req = requests.get('http://goapi.mackolik.com/livedata?group=0').json()
for el in req['m'][4:100]:
index = el[0]
team_1 = el[2].replace(' ', '-')
team_2 = el[4].replace(' ', '-')
print('http://www.mackolik.com/Mac/{}/{}-{}'.format(index, team_1, team_2))
谢谢sooo多。我想问最后一件事,一些链接包含'http://www.mackolik.com/Mac/...',一些链接应该包含'http://www.mackolik.com/Basket-Mac/ .. 。我怎么能写出区别这两者的东西? – Gorkem
对不起,但我必须把它留给你。我可以发现,这些网址对于足球和篮球队来说是不同的。你需要在json数据中发现他们之间的差异(可能是他们的联盟的名字?),并在脚本中添加一条条件语句来检查差异并返回正确的url。或者,您可以根据当前位置简单地更改网址:首先,在返回足球网址后,将“篮子”添加到网址并返回剩余的篮球网址。 – vold
按照您的建议找到了标识符以区分这些类型。再次感谢您:) – Gorkem
这似乎是HTML被动态地生成的JS。您需要使用抓取工具来抓取它以模仿浏览器。由于您正在使用requests
,它已经有一个履带式的session
。
session = requests.session()
data = session.get ("http://website.com").content #usage xample
在这之后,你可以做解析,另外刮等
我试过了,但没有工作,它只给了来自网站头几行。 – Gorkem
也许网站正在检查用户代理。您是否尝试将用户代理更改为Chrome之类的东西? – Dashadower
你能指定你想要的输出吗?它是否像Url:'http:// www.mackolik.com/Mac/2581146/Kayserispor-Osmanlıspor-FK'? – vold
@vold是正确的。对于每场比赛都有一个在球队名字之间的链接。这是我想要提取的链接。 – Gorkem