0

我正在尝试使用 Python 2.7.2 进行一些抓取。我刚刚开始使用 Python,不幸的是它并不像我想象的那么直观。我尝试从所有页面收集所有特定的 -s。我不知道如何从字符串数组中的所有页面累积结果。到目前为止,我只从 1 页得到结果。我知道这对于使用 python 编写的人来说是一个非常简单的问题。所以请帮助我。这是代码:

import urllib
import re
j=1
while j<10:
    url="http://www.site.com/search?page=" + str(j) + "&query=keyword"
    print url
    htmlfile=urllib.urlopen(url)
    htmltext=htmlfile.read()
    regex='<span class="class33">(.+?)</span>'
    pattern=re.compile(regex)
    spans=re.findall(pattern,htmltext)
    #spans[j] insttead of spans doesn't work
    #spans.append(spans) doesn't work
    j+=1
i=0
while i<len(spans):
    print spans[i]
    i+=1
4

3 回答 3

1
  1. 将所有不变代码放在for循环之外
  2. for循环之外初始化s到空列表

    s = []
    
  3. for循环内

        s.extend(re.findall(pattern, htmltext))
    

如果您愿意s += re.findall(pattern, htmltext),也可以这样做

于 2013-07-03T15:45:40.110 回答
0

改变

spans=re.findall(pattern,htmltext)

spans.extend(re.findall(pattern,htmltext))

我也会稍微改变你的循环语法

import urllib
import re
spans = []
for j in range(1,11):
    url="http://www.site.com/search?page=" + str(j) + "&query=keyword"
    print url
    htmlfile=urllib.urlopen(url)
    htmltext=htmlfile.read()
    regex='<span class="class33">(.+?)</span>'
    pattern=re.compile(regex)
    spans.extend(re.findall(pattern,htmltext))
for span in spans:
    print span
于 2013-07-03T15:40:10.297 回答
0

在循环之前,定义跨度:

spans = []

然后在你的循环中:

spans.extend(re.findall(pattern,htmltext))

findall 方法将返回一个列表。您想在每次迭代中使用新的跨度来扩展跨度列表。

于 2013-07-03T15:42:26.580 回答