我想为Bing的搜索结果进行网页抓取。基本上,我使用的是硒,我们的想法是使用硒来点击“下一步”。自动删除每个页面的搜索结果的URL。我在我的Ubuntu上运行了Chrome浏览器:
from selenium import web driver
import os
class bingURL(object):
def __init__(self):
self.driver=webdriver.Chrome(os.path.expanduser('./chromedriver'))
def get_urls(self,url):
driver=self.driver
driver.get(url)
elems = driver.find_elements_by_xpath("//a[@href]")
href=[]
for elem in elems:
link=elem.get_attribute("href")
try:
if 'bing.com' not in link and 'http' in link and 'microsoft.com' not in link and 'smashboards.com' not in link:
href.append(link)
except:
pass
return list(set(href))
def search_urls(self,keyword,pagenum):
driver=self.driver
searchurl=self.lookup(keyword) ### url of first page of google search
driver.get(searchurl)
results=self.get_urls(searchurl)
for i in range(pagenum):
driver.find_elements_by_class_name("sb_pagN")[0].click() # click 'Next' of bing search result
time.sleep(5) # wait to load page
current_url=driver.current_url
#print(current_url)
#print(self.get_urls(current_url))
results[0:0]=self.get_urls(current_url)
driver.quit()
return results
def lookup(self,query):
return "https://www.bing.com/search?q="+query
if __name__ == "__main__":
g=bingURL()
result=g.search_urls('Stackoverflow is good',10)
它完美运行,当我运行代码时,它会启动Chrome浏览器,我可以看到它自动转到下一页,并获取10页搜索结果的网址。
但是,我的目标是成功在AWS上运行这些代码。原始代码失败,错误“Chrome无法启动”#39;谷歌之后,似乎我需要在AWS上使用像PhantomJS这样的无头浏览器。因此我安装了PhantomJS,并将def __init__(self):
更改为:
def __init__(self):
self.driver=webdriver.PhantomJS()
但是,它无法点击下一步'再也不能使用旧代码废弃URL。错误消息是:
File ".../SEARCH_BING_MODULE.py", line 70, in search_urls
driver.find_elements_by_class_name("sb_pagN")[0].click()
IndexError: list index out of range
看起来改变浏览器完全改变了规则。我应该如何修改原始代码以使其再次运行?或者如何废弃Bing搜索结果'使用selenium + PhantomJS的网址?
感谢您的帮助!
答案 0 :(得分:0)
是的,您可以使用无头浏览器按照全部3点执行所有操作。不要使用HTMLUnit,因为它有很多配置问题。
PhamtomJS是无头浏览器的另一种方法,但PhantomJs最近因为维护不善而出现了bug。
你可以将chromedriver本身用于无头工作。
您只需要在chromedriver中传递一个选项,如下所示: -
chromeOptions.addArguments("--headless");
完整代码将如下所示: -
System.setProperty("webdriver.chrome.driver","D:\\Workspace\\JmeterWebdriverProject\\src\\lib\\chromedriver.exe");
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--headless");
chromeOptions.addArguments("--start-maximized");
WebDriver driver = new ChromeDriver(chromeOptions);
driver.get("https://www.google.co.in/");
希望它会对你有所帮助:)。