【问题标题】:Returning the URL Value of Hyperlink After Searching Webpage For Specific Hyperlink in Python在Python中搜索特定超链接的网页后返回超链接的URL值
【发布时间】:2017-06-22 13:49:15
【问题描述】:

我的目标是编写一个脚本,用于下载图片壁纸网站链接中包含的 jpg 文件。为了实现这一点,我想基本上在网页上搜索超链接(由变量定义,这里是屏幕分辨率的 screenres),因为这个特定的网站列出了文件的不同分辨率。在网页中搜索超链接(例如:1280x800)后,我想以url的形式返回超链接的值(例如:www.testwallpaperwebsite.com/image1020x800.jpg)。然后我会将其传递给其他工具以下载 jpg。到目前为止,这是我返回网页上所有 url 链接的代码,但我似乎无法找到一种方法让我搜索超链接并仅返回该 url:

import urllib.request
import lxml.html

screenres = 1280x800 # this is the hyperlink I am trying to find on webpage, however variable can change depending on screen size
connection = urllib.request.urlopen("www.testwallpaperwebsite.com")
dom =  lxml.html.fromstring(connection.read())
for link in dom.xpath('//a/@href'): 
    print(link) 

我在 Stack Overflow 上找到了很多关于检索 URL 的答案,但没有任何东西可以帮助我专门搜索超链接并提取其 URL。有没有办法让它首先识别一组字符(如我的变量)是否是超链接?诚然,我对 Python 和网络爬虫比较陌生,所以我仍在尝试掌握提取信息的机制。此外,如果这个简单的任务可以通过仅使用 urllib/lxml/其他本机模块而不是下载 BeautifulSoup 来完成,那就太好了。但是,如果没有其他办法,或者这样做会非常复杂,我绝对可以下载并使用BeautifulSoup;只是想尝试降低脚本的复杂性。感谢您的帮助!

【问题讨论】:

  • 向我们提供 HTML 代码,包括所需的超链接。如果您认为必须伪装,您可以伪装网站的域,但我们需要此信息,因为根据 url 在 HTML 中嵌入的方式,显示您想要的内容所需的代码可能会有所不同。例如,人们可能希望抓取的网站之一有这样的代码<li><a href="/size/1280x1024/"><span class="FCU">3619</span>1280x1024</a></li>。你的可能完全不同。

标签: python-3.x hyperlink web-scraping lxml urllib


【解决方案1】:

您绝对应该尝试BeautifulSoup。查看他们的文档here。您可以使用以下方式查找图像:

from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc, 'html.parser')
soup.find_all("a", href=re.compile("YOUR REGEX")

【讨论】:

  • 好的,但是如何使用 bs4 来查找超链接呢?我不需要运行正则表达式,因为我已经有了我需要匹配的确切值。我只想让它找到超链接标签“1280x800”(就像它会出现在网页上一样)并给我与之关联的 URL。 bs4 的所有文档都讨论了更复杂的多个 url 提取和正则表达式搜索功能,我想我陷入了困境。你知道有一种简单的方法可以做到这一点吗?谢谢!
  • 您可以使用以下方式查找所有超链接:soup.find_all("a")
猜你喜欢
  • 2014-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-11
  • 2012-07-20
  • 2021-02-05
  • 1970-01-01
相关资源
最近更新 更多