使用Selenium(Python3)抓取网站的多个页面

时间:2015-12-14 12:47:33

标签: python selenium

我一直跑到墙上。任何人都可以通过告诉我如何使用Selenium从一个网站抓取多个页面而不必一遍又一遍地重复我的代码来帮助我。

这是我目前的代码:

RegionIDArray = ['de/7132/New-York-City/d687-allthingstodo',  'de/7132/London/d737-allthingstodo']

class Crawling(unittest.TestCase):
 def setUp(self):
     self.driver = webdriver.Firefox()
     self.driver.set_window_size(10, 10)
     self.base_url = "http://www.jsox.de/"
     self.accept_next_alert = True


 def test_sel(self):
     driver = self.driver
     delay = 3
     for reg in RegionIDArray:
        page = 0
     driver.get(self.base_url + str(reg))
     for i in range(1,4):
         driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
         time.sleep(2)

如果我运行此代码,我只能获得伦敦的结果,但不会获得纽约的第二个城市。

现在,我可以手动执行此操作,反复重复我的代码并抓取每个网站页面,然后将每个数据框的结果连接在一起,但这似乎非常不合理。我想知道是否有人有更快的方式或任何建议?

感谢任何反馈:)

修改

我根据对Anil的评论修改了我的代码。 Selenium现在打开纽约和伦敦的页面,但它只为伦敦提供结果。任何想法,原因是什么?

修改后的代码:

 RegionIDArray = ['de/7132/New-York-City/d687-allthingstodo', 'de/7132/London/d737-allthingstodo']


 class Crawling(unittest.TestCase):
     def setUp(self):
         self.driver = webdriver.Firefox()
         self.driver.set_window_size(10, 10)
         self.base_url = "http://www.jsox.de/"
         self.accept_next_alert = True


     def test_sel(self):
         driver = self.driver
         delay = 3
         for reg in RegionIDArray:
             page = 0
             driver.get(self.base_url + str(reg))
             for i in range(1,4):
             driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
             time.sleep(2)

2 个答案:

答案 0 :(得分:1)

你的for循环

for reg in RegionIDArray:
    page = 0

将遍历所有列表项,并在退出reg时指向最后一项,即伦敦。这就是为什么你只得到最后一项

相反,您只需要将driver部分放在for循环中

def test_sel(self):
     driver = self.driver
     delay = 3
     for reg in RegionIDArray:
         page = 0
         driver.get(self.base_url + str(reg))
         for i in range(1,4):
             driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
             time.sleep(2)

答案 1 :(得分:1)

Python循环由缩进控制。

for i in range(1,4):
             driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
             time.sleep(2)