2016-02-12 56 views
3

Python中有一種簡單的方法來循環一個簡單的數字列表嗎? 我想從不同的網址中獲取一些數據,這些網址只有3個數字不同?python中的簡單forvalues循環?

我對Python很新,想不出一個簡單的方法來做到這一點。 非常感謝! 這裏是我的代碼:

import csv 
from urllib.request import urlopen 
from bs4 import BeautifulSoup 

html = urlopen("http://www.example.com/3322") 
bsObj = BeautifulSoup(html) 
table = bsObj.findAll("table",{"class":"MainContent"})[0] 
rows=table.findAll("td") 

csvFile = open("/Users/Max/Desktop/file1.csv", 'wt') 
writer = csv.writer(csvFile) 
try: 
    for row in rows: 
     csvRow=[] 
     for cell in row.findAll(['tr', 'td']): 
      csvRow.append(cell.get_text()) 
      writer.writerow(csvRow) 
finally: 
    csvFile.close() 

在Stata這將是這樣的:

foreach i of 13 34 55 67{ 
    html = urlopen("http://www.example.com/`i'") 
     .... 
     } 

非常感謝! 最大

+0

嘗試在範圍,像對於x範圍內(0,9):打印(X) –

回答

0

做到這一點的應用循環內的過濾器的最簡單方法:

mylist=[1,16,8,32,7,5] 
for myitem in mylist: 
    if myitem in (5,7,16): 
     print myitem # or print(myitem) 

這可能不是,但是,是最優雅的方式來做到這一點。如果你想存儲的匹配結果的一個新的列表,你可以使用列表理解:

mylist=[1,16,8,32,7,5] 
fieldmatch=[5,7,16] 
filteredlist=[ x for x in mylist if x in fieldmatch ] 

然後,您可以採取filteredlist只包含在mylist匹配fieldmatch(換句話說,你原來的列表過濾的項按照你的標準),並像其他列表一樣遍歷它:

for myitem in filteredlist: 
    # Perform whatever process you want to each item here 
    do_something_with(myitem) 

希望這會有所幫助。

+0

好THX。但我看不到我是如何遍歷每個數字的整個代碼的。 Sry爲這個'簡單'問題。 – Max

1

我會用set.intersection()爲:

mylist=[1,16,8,32,7,5] 
fieldmatch=[5,7,16] 

intersection = list(set(mylist).intersection(fieldmatch)) 
2

我打破你原來的代碼到功能只是爲了更清楚我的想法是回答你的問題:用一個簡單的循環,和.format()來構建網址和文件名。

import csv 
from urllib.request import urlopen 
from bs4 import BeautifulSoup 

def scrape_url(url): 
    html = urlopen(url) 
    bsObj = BeautifulSoup(html) 
    table = bsObj.findAll("table",{"class":"MainContent"})[0] 
    rows=table.findAll("td") 
    return rows 

def write_csv_data(path, rows): 
    csvFile = open(path, 'wt') 
    writer = csv.writer(csvFile) 
    try: 
     for row in rows: 
      csvRow=[] 
      for cell in row.findAll(['tr', 'td']): 
       csvRow.append(cell.get_text()) 
       writer.writerow(csvRow) 
    finally: 
     csvFile.close() 

for i in (13, 34, 55, 67): 
    url = "http://www.example.com:3322/{}".format(i) 
    csv_path = "/Users/MaximilianMandl/Desktop/file-{}.csv".format(i) 

    rows = scrape_url(url) 
    write_csv_data(csv_path, rows) 
+0

非常感謝!現在它更清晰了! – Max

1

我不熟悉stata,但是。它看起來像蟒蛇相當於可能是簡單的:

import request 
for i in [13 34 55 67]: 
     response = request("http://www.example.com/{}".format(i)) 
      ....