我正试图从网站上获取链接(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
答案 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或其他一些网站,你应该很好。