我对抓取网站是陌生的,我一直在尝试使用python抓取Google图片(最终是制作一个不和谐的bot,但这没关系)。我执行了以下代码以将图像src的内容存储为列表,以便选择索引并显示图像(我使用xpath helper chrome扩展程序对其进行了测试,并返回了所需的内容):
from selenium import webdriver
from selenium.webdriver.common.by import By
chrome_path =r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'
chromedriver_path = r'C:\Users\user\Desktop\chromedriver.exe'
driver = webdriver.Chrome(chromedriver_path)
driver.get("https://www.google.com/search?q=pepega&rlz=1C1GIWA_enGB617GB617&source=lnms&tbm=isch&sa=X&ved=0ahUKEwjH1e6b-YfhAhWRs3EKHeKmAqoQ_AUIDigB&biw=2560&bih=947")
review = driver.find_elements_by_xpath("//div[@jscontroller ='Q7Rsec']/a/img/@src")
print(review)
我得到的错误如下:
Traceback (most recent call last):
File "C:\Users\user\Desktop\tessst.py", line 8, in <module>
review = driver.find_elements_by_xpath("//div[@jscontroller ='Q7Rsec']/a/img/@src")
File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 410, in find_elements_by_xpath
return self.find_elements(by=By.XPATH, value=xpath)
File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 1007, in find_elements
'value': value})['value'] or []
File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.InvalidSelectorException: Message: invalid selector: The result of the xpath expression "//div[@jscontroller ='Q7Rsec']/a/img/@src" is: [object Attr]. It should be an element.
(Session info: chrome=73.0.3683.75)
(Driver info: chromedriver=73.0.3683.68 (47787ec04b6e38e22703e856e101e840b65afe72),platform=Windows NT 10.0.17134 x86_64)
我认为这是由于xpath查询所致,因为它说应该是一个“元素”,但是由于我对此并不陌生,所以我不知道如何将图像SRC作为元素返回。有人可以告诉我如何解决我的查询,以便在python中不会显示错误吗?谢谢
编辑:我想我已经按照我的意愿做了,我想对大家的帮助表示感谢。香港专业教育学院所做的事情可能按照您的标准来说是原始的,但如果以防万一,它会给人以帮助,那么就不宜分享:)
最终代码:
import nltk
from selenium import webdriver
from selenium.webdriver.common.by import By
chrome_path =r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'
chromedriver_path = r'C:\Users\user\Desktop\chromedriver.exe'
driver = webdriver.Chrome(chromedriver_path)
driver.get("https://www.google.com/search?q=pepega&rlz=1C1GIWA_enGB617GB617&source=lnms&tbm=isch&sa=X&ved=0ahUKEwjH1e6b-YfhAhWRs3EKHeKmAqoQ_AUIDigB&biw=2560&bih=947")
review = driver.find_elements_by_xpath("//div[@jscontroller ='Q7Rsec']/a/img")
imglist = []
for x in review:
if x.get_attribute("src") != "":
temp = str(x.get_attribute("src"))
if temp[0:8] == "https://":
imglist.append(str(x.get_attribute("src")))
print(imglist)
我只是发现没有使用nltk(我在某个时候玩它,却忘了删除它)
答案 0 :(得分:0)
没关系,我很愚蠢,只是现在才注意到您的URL在脚本中。我可以确认您的xpath正在找到src
元素的img
属性。下面应该找到该元素,然后获取其src属性。
review = driver.find_elements_by_xpath("//div[@jscontroller ='Q7Rsec']/a/img")
这将返回100个元素。我不确定您要使用这些源代码,但是这里有一些代码可以简单地打印每个源代码:
for x in review
if x.get_attribute.src != "":
print(x.get_attribute(“src”)
这应为指定了src
的55个元素打印src
属性。
答案 1 :(得分:0)
您无法在缺少的xpath中添加src
属性。但是,我观察到某些不具有src
属性的图像,而不是{{1 }}属性。这是您的解决方案。希望这会有所帮助。
data-src