Python美丽的汤从网页上抓取网址

时间:2017-10-12 08:13:25

标签: python url web-scraping beautifulsoup

我正在尝试从html格式的网站上抓取网址。我用美味的汤。这是html的一部分。

                         <li style="display: block;">
                                <article itemscope itemtype="http://schema.org/Article">
                                    <div class="col-md-3 col-sm-3 col-xs-12" >
                                        <a href="/stroke?p=3083" class="article-image">
                                            <img itemprop="image" src="/FileUploads/Post/3083.jpg?w=300&h=160&mode=crop" alt="Banana" title="Good for health">
                                        </a>
                                    </div>

                                    <div class="col-md-9 col-sm-9 col-xs-12">
                                        <div class="article-content">

                                                <a href="/stroke">
                                                    <img src="/assets/home/v2016/img/icon/stroke.png" style="float:left;margin-right:5px;width: 4%;">
                                                </a>
                                            <a href="/stroke?p=3083" class="article-title">
                                                <div>
                                                    <h4 itemprop="name" id="playground">
Banana Good for health                                                         </h4>
                                                </div>
                                            </a>
                                            <div>                                               
                                                <div class="clear"></div>
                                                <span itemprop="dateCreated" style="font-size:10pt;color:#777;">
                                                    <i class="fa fa-clock-o" aria-hidden="true"></i>
09/10                                                       </span>
                                            </div>
                                            <p itemprop="description" class="hidden-phone">
                                                <a href="/stroke?p=3083">
                                                    I love Banana.
                                                </a>
                                            </p>
                                        </div>
                                    </div>
                                </article>
                            </li>

我的代码:

from bs4 import BeautifulSoup
re=requests.get('http://xxxxxx')
bs=BeautifulSoup(re.text.encode('utf-8'), "html.parser")
for link in bs.find_all('a') :
    if link.has_attr('href'):
        print (link.attrs['href'])

结果将打印出此页面中的所有网址,但这不是我要找的内容,我只想要一个像&#34; / stroke?p = 3083&#34;在这个例子中如何在python中设置条件? (我知道有三个&#34; / stroke?p = 3083&#34;在这,但我只需要一个)

另一个问题。这个网址不完整,我需要将它们与&#34; http://www.abcde.com&#34;所以结果将是&#34; http://www.abcde.com/stroke?p=3083&#34;。我知道我可以在R中使用paste,但是如何在Python中执行此操作?提前致谢! :)

3 个答案:

答案 0 :(得分:2)

只需在刮刀中添加一个替换some_link的链接即可。我想你会得到你想要的链接以及它的完整形式。

import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin

res = requests.get(some_link).text
soup = BeautifulSoup(res,"lxml")
for item in soup.select(".article-image"):
    print(urljoin(some_link,item['href']))

答案 1 :(得分:0)

  

另一个问题。这个网址不完整,我需要将它们结合起来   使用“gensim library for word2vec”,结果将是   “http://www.abcde.com”。我知道我可以在R中使用粘贴,但是   如何在Python中执行此操作?提前致谢! :)

link = 'http://abcde.com' + link

答案 2 :(得分:0)

你已经掌握了大部分权利。收集链接如下(只是你正在做的列表理解版本)

urls = [url for url in bs.findall('a') if url.has_attr('href')]

这会给你网址。要获取其中一个,并将其附加到abcde网址,您只需执行以下操作:

if urls:
    new_url = 'http://www.abcde.com{}'.format(urls[0])