循环并添加到列表

时间:2013-11-19 20:06:24

标签: python selenium

我正在尝试创建要访问的网址visit_urls的列表。 首先我手动指定第一个访问self.br.get(url)的网址 并检查页面的页面数量,例如它有40页,我会知道它有“计数”,我只想用& page = 2& page = 3切换到网址的结尾列表中有40个。

这是我的代码的循环部分。我只需要一种方法将所有页面添加到visit_urls列表

visit_urls=[]
self.br.get(url)
count = self.br.find_elements_by_xpath("//*[@class='count']").get_attribute("innerHTML"):
for (here up to count) 
    self.visit_urls.append(url + need to append this also to the end of the first url &page=2-count)

这段代码是经过大量研究而来的,我被困住了,所以任何帮助都会很棒!

3 个答案:

答案 0 :(得分:3)

尝试这样的事情:

visit_urls=[]
self.br.get(url)
count = self.br.find_elements_by_xpath("//*[@class='count']").get_attribute("innerHTML")

for page_number in xrange(1, count+1):
    url = '{url}&page={page_number}'.format(url=url, page_number=page_number)
    visit_urls.append(url)

假设url永不改变,这将有效。也就是说,如果url变量始终指向同一个网址,您最终会得到http://www.mysite.com&page=1&page=2&page=3

等网址

确保始终正确定义网址。

答案 1 :(得分:1)

我假设一切正常,您遇到的问题是根据您在“计数”中的调查结果生成所有网址数组。

最简单的方法是,如果您已经知道了URL,并且它的格式正确,例如:

url = 'http://www.thisisapage.com/somethinghere/dosomething.php?page=1'

如果是这种情况,请执行某事以剥离1,获取“baseurl”以进行操作(具体如何执行此操作取决于哪些URL及其形成方式):

baseurl = 'http://www.thisisapage.com/somethinghere/dosomething.php?page='

之后,只需从n循环到count,将当前迭代附加到baseurl。

通常情况下,如果您要使用复杂的URL或可能包含安全令牌等的动态URL,使用正则表达式会更容易。

为此,你可以使用类似的东西:

import re
m = re.match(r'^(.*)(page=\d+&?)(.*)$', url)

for i in range(2, count):
    self.visit_urls.append(m.group(1) + 'page=%i' % i + m.group(3))

当然,既然你正在使用一个URL,那可能是很多东西,那么你将会看到正则表达式捕获它需要的所有东西。根据您提供的信息,我很简单。

答案 2 :(得分:0)

Python中一个非常基本的webcrawler:

import re, urllib 

print "Enter the URL you wish to crawl.." # 
print 'Usage  - "http://example.com/"'
myurl = input("@> ")
for i in re.findall('''href=["'](.[^"']+)["']''', urllib.urlopen(myurl).read(), re.I): 
    for ee in re.findall('''href=["'](.[^"']+)["']''', urllib.urlopen(i).read(), re.I):
            print ee