我正在努力学习如何做网页抓取,但它并没有以我希望的格式出现。以下是我遇到的问题:
import urllib
import re
pagelist = ["page=1","page=2","page=3","page=4","page=5","page=6","page=7","page=8","page=9","page=10"]
ziplocations = ["=30008","=30009"]
i=0
while i<len(pagelist):
url = "http://www.boostmobile.com/stores/?" +pagelist[i]+"&zipcode=30008"
htmlfile = urllib.urlopen(url)
htmltext = htmlfile.read()
regex = '<h2 style="float:left;">(.+?)</h2>'
pattern = re.compile(regex)
storeName = re.findall(pattern,htmltext)
print "Store Name=", storeName[i]
i+=1
此代码生成以下结果: Store Name=Boost Mobile Store by wireless仓库 商店名称=沃尔玛 ..... 所以对于10家不同的商店,我假设这是因为
while i<len(pagelist):
只等于十
所以它只打印出10个商店,而不是所有页面上列出的所有商店。你知道吗
当我把第二行改成最后一行的时候
print storeName
它将打印出每页上列出的每个商店名称,但不是采用上述格式,而是如下所示: “Boost mobile store by wireless depot”、“Boost mobile store by kob wireless”、“marietta check chashing services”,。。。。。以此类推,大约还有120个条目。 那么,如何将其转换为所需的格式:“Store Name=…..”而不是“Name”、“Name”,。。。。。你知道吗
storeName
是一个数组,需要循环遍历它。目前,您在每一页上都使用页码对其进行索引,这可能不是您的意图。你知道吗下面是代码的正确版本,添加了循环。你知道吗
Do not parse HTML with regex.使用一个专门的工具-an
HTML Parser
。你知道吗下面是使用^{} 的解决方案:
它打印:
如您所见,首先我们找到一个带有
results
类的table
标记—这就是商店名称的实际位置。然后,在table
中我们找到了所有的h2
标记。这比依赖标签的style
属性更健壮。你知道吗您还可以使用^{} 。它将提高性能,因为它只解析您指定的文档部分:
这里我们说:“只解析带有类
results
的table
标记。把里面的h2
标签都给我们。”另外,如果要提高性能,可以let ^{} use ^{} parser under the hood :
希望有帮助。你知道吗
相关问题 更多 >
编程相关推荐