从特定网址抓取链接

时间:2017-04-08 20:46:46

标签: python html json web-scraping beautifulsoup

这是我的第一个问题,如果我解释了什么错,请原谅我。

我正在尝试从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")

3 个答案:

答案 0 :(得分:1)

如果您正在尝试抓取网址,那么您应该获得hrefs:

urls = soup.find_all('a', href=True)

答案 1 :(得分:0)

似乎html是由js动态生成的。您需要使用爬虫来抓取它以模仿浏览器。由于您使用的是requests,因此它已经有一个抓取工具session

session = requests.session()
data = session.get ("http://website.com").content #usage xample

在此之后你可以进行解析,额外的抓取等等。

答案 2 :(得分:0)

此网站使用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))