2017-09-02 17 views
0

第一次在這裏發佈海報,所以請溫柔!我很新的Python和我有一個小麻煩使用下面的代碼刮多個網址:在Python/Anaconda中使用urllib刮取多個網址(For循環問題)

from urllib import urlopen as uReq 
    from bs4 import BeautifulSoup as soup 

    my_url = ["https://www.zoopla.co.uk/for-sale/property/birmingham/?q=birmingham&results_sort=newest_listings&search_source=home&page_size=100", "https://www.zoopla.co.uk/for-sale/property/birmingham/?identifier=birmingham&page_size=100&q=birmingham&search_source=home&radius=0&pn=2"] 



for urls in my_url: 


uClient = uReq(my_url) 
page_html = uClient.read() 
uClient.close() 


page_soup = soup(page_html,"html.parser") 


containers = page_soup.findAll("div",{"class":"listing-results-wrapper"}) 

filename = "links.csv" 
f = open (filename, "w") 

headers = "link\n" 

f.write(headers) 


for container in containers: 
    link = container.div.div.a["href"] 

    print("link: " + link) 

    f.write(link + "\n") 

    f.close() 

我猜測,我想提出一個非常元素的錯誤,但我似乎無法通過搜索發現了什麼論壇/谷歌等,因爲我必須在錯誤的地方看。

編輯:我已經想到,我最好能夠解釋我正在努力實現的目標!我試圖創建一個包含變量'containers'所獲取信息的csv文件。

這段代碼似乎只適用於1個url,但我得到了AttributeError:'list object has no attribute'strip'when adding additional urls。

請問有人願意提供一些協助嗎?

任何幫助將不勝感激!

+0

很難說你的代碼是如何格式化的,而是在最後的'for'循環裏或外部的'f.close()嗎?如果它在裏面,那麼只需要一個'write'就可以關閉文件。 – nbryans

+0

格式化的道歉,當我複製到問題中時,所有內容都有點不合時宜。我相信f.close()在最後的for循環中。 – chambers10

+0

代碼不斷返回一個AttributeError:'list'對象沒有屬性'strip' – chambers10

回答

0

代碼搞砸了,但列表正在被調用。

from urllib import urlopen as uReq 
from bs4 import BeautifulSoup as soup 

my_url = ["https://www.zoopla.co.uk/for-sale/property/birmingham/?q=birmingham&results_sort=newest_listings&search_source=home&page_size=100", "https://www.zoopla.co.uk/for-sale/property/birmingham/?identifier=birmingham&page_size=100&q=birmingham&search_source=home&radius=0&pn=2"] 



for urls in my_url: 
    uClient = uReq(urls) 
    page_html = uClient.read() 
    uClient.close() 
    page_soup = soup(page_html,"html.parser") 
    containers = page_soup.findAll("div",{"class":"listing-results-wrapper"}) 
    filename = "links.csv" 
    f = open (filename, "w") 
    headers = "link\n" 
    f.write(headers) 
    for container in containers: 
     link = container.div.div.a["href"] 
     print("link: " + link) 
     f.write(link + "\n") 
    f.close() 
+0

非常感謝,我不再使用此代碼獲取錯誤消息!剩下的唯一問題是,這似乎只是保存列表(或最終的url)中的第二個(最終)url的信息。這可能是由於代碼的順序嗎? – chambers10

+0

您應該使用open-statement將for循環包裝或將open-method更改爲「a」。否則,你會覆蓋循環中每個URL的內容。 – jlaur

+0

太棒了,非常感謝。 – chambers10