使用Python进行Web抓取。对包含空格的字符串使用select()方法

时间:2016-11-01 04:20:26

标签: python select web-scraping beautifulsoup

我正试图从网站上获取链接(href)。元素是:

<a class="overlay no-outline" href="/photos/28716729@N06/2834595694/" tabindex="0" role="heading" aria-level="3" aria-label="puppy by mpappas83" data-rapid_p="61" id="yui_3_16_0_1_1477971884605_5513"></a>

首先,我尝试匹配班级"overlay no-outline"。 但请注意它有一个空格,因此select()方法将它视为两个不同的选择器而不是一个。

imgElem= soup.select('.overlay no-outline')      #attempt

有谁知道我怎么能做到这一点?

网站位于www.flickr.com

2 个答案:

答案 0 :(得分:1)

以下方法应该有所帮助:

import bs4

html = """<a class="overlay no-outline" href="/photos/28716729@N06/2834595694/" tabindex="0" role="heading" aria-level="3" aria-label="puppy by mpappas83" data-rapid_p="61" id="yui_3_16_0_1_1477971884605_5513"></a>"""
soup = bs4.BeautifulSoup(html, "html.parser")

for link in soup.select("a.overlay.no-outline"):
    print link['href']

显示:

/photos/28716729@N06/2834595694/        

两者之间的空格用于表示正在应用两个不同的类,BeautifulSoup documentation确实有一个关于如何使用上述方法解决此问题的部分。查找文本&#34;如果要搜索与两个或更多CSS类匹配的标签&#34;。

答案 1 :(得分:0)

import os
from lxml import html
import requests
import fnmatch

class HtmlRat:

    def __init__(self):
        pass

    def req_page(self, url):
        page = requests.get(url)
        return page

    def tag_data(self, txpath):
        tag_val = tree1.xpath(txpath + "/text()")
        val = ''.join(tag_val).strip(' ')
        val = val.split(' ')
        return val

def link_grabber(url, pattern):
    markup = HtmlRat()
    tree1 = markup.req_page(url)
    for tree in tree1:
        tre = tree.split(" ")
        for t in tre:
            if fnmatch.fnmatch(t, pattern):
                print t

flickr = link_grabber("https://www.flickr.com/search/?text=cars", 'href="*"')
superstreet = link_grabber("http://www.superstreetonline.com/features/1610-2013-scion-fr-s-multipurposed/", 'href="*.jpg"')

# from here you can split it by = to get the links it self.

这应该有效。但是当我们阅读页面的来源时,链接就不存在了。很确定它们是通过后端生成的。使用代码查看pexels或其他一些网站,你应该很好。