【问题标题】:Can't parse links to the different posters from a webpage无法从网页解析指向不同海报的链接
【发布时间】:2019-01-06 19:59:42
【问题描述】:

试图从this site 的左侧区域获取所有电影海报,但我的脚本只解析第一个并退出。

如何获取所有以.jpg 扩展名结尾的电影海报链接?

from selenium import webdriver

def fetch_image_links(driver,link):
    driver.get(link)
    for item in driver.find_elements_by_css_selector("a[href^='/title/'] img.loadlate[src$='.jpg']"):
        print(item.get_attribute("src"))

if __name__ == '__main__':
    url = "https://www.imdb.com/list/ls006385184/"
    driver = webdriver.Chrome()
    try:
        fetch_image_links(driver,url)
    finally:
        driver.quit()

【问题讨论】:

  • "Licensing IMDb Content; 同意使用机器人和爬虫:如果您有兴趣获得我们将 IMDb 内容用于非个人(包括商业)用途的明确书面许可,请访问我们的内容许可部分或联系我们的许可部门。经我们明确的书面同意,我们确实允许有限使用机器人和爬虫,例如来自某些搜索引擎的机器人和爬虫。如果您有兴趣获得我们在我们网站上使用机器人或爬虫的明确书面许可,请联系我们的许可部门。”

标签: python python-3.x selenium selenium-webdriver web-scraping


【解决方案1】:

当页面打开时,只有前几部电影有海报 - 所有其他都有默认图片。 您需要向下滚动页面并等待没有显示默认图像的那一刻(所有电影海报都已加载)

from selenium.webdriver.common.keys import Keys 

default_img = "https://m.media-amazon.com/images/G/01/imdb/images/nopicture/large/film-184890147._CB470041630_.png"

def fetch_image_links(driver,link):
    driver.get(link)
    while driver.find_elements_by_css_selector("a>img[src='%s']" % default_img):
        driver.find_element_by_tag_name('a').send_keys(Keys.PAGE_DOWN)
    for item in driver.find_elements_by_css_selector("a[href^='/title/'] img.loadlate[src$='.jpg']"):
        print(item.get_attribute("src"))

【讨论】:

  • 最好的实现之一@sir Andersson。这不是有点棘手吗?
  • @robots.txt , 页面行为复杂,常用方法不适用。这个解决方案可能不是很明显... :) 另外我不太喜欢while 循环没有break 条件,但它似乎应该可以完美地工作。如果出了什么问题,或者您想以某种方式简单地解决它,请告诉我
  • this link的内容是我最后用的@sir Andersson。
  • @robots.txt ,我猜使用该代码,您执行的 PageDown 压力超出了您的需要。您还可以进行验证,例如if not driver.find_elements_by_css_selector("a>img[src$='.png']"): break
  • 如果你看看this post@sir Andersson 会很高兴。
猜你喜欢
  • 2020-03-02
  • 1970-01-01
  • 1970-01-01
  • 2017-11-19
  • 2012-09-18
  • 1970-01-01
  • 2019-02-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多