2014-11-16 75 views
1

如何從第1部分平滑過渡到第2部分並將結果保存在第3部分中?到目前爲止,除非我自己將其插入到第2部分中,否則我一直無法解析刮掉的url鏈接。此外,我無法保存輸出結果,因爲最後一個url鏈接覆蓋了所有其他鏈接。解析從已保存的html文件解析的URL鏈接列表中的標記的url鏈接。並將其全部保存在csv輸出中

import urllib 
import mechanize 
from bs4 import BeautifulSoup 
import os, os.path 
import urlparse 
import re 
import csv 

第1部分:

path = '/Users/.../Desktop/parsing/1.html' 

f = open(path,"r") 
if f.mode == 'r':  
    contents = f.read() 

soup = BeautifulSoup(content 
search = soup.findAll('div',attrs={'class':'mf_oH mf_nobr mf_pRel'}) 
searchtext = str(search) 
soup1 = BeautifulSoup(searchtext) 

for tag in soup1.findAll('a', href = True): 
    raw_url = tag['href'][:-7] 
    url = urlparse.urlparse(raw_url) 
    p = "http"+str(url.path) 

第2部分:

for i in url: 
    url = "A SCRAPED URL LINK FROM ABOVE" 

    homepage = urllib.urlopen(url) 
    soup = BeautifulSoup(homepage) 

    for tag in soup.findAll('a',attrs={'name':'g_my.main.right.gifts.link-send'}): 
     searchtext = str(tag['href']) 
     original = searchtext 
     removed = original.replace("gifts?send=", "") 
     print removed 

第3部分

i = 0 
for i in removed: 
    f = open("1.csv", "a+") 
    f.write(removed) 
    i += 1 
    f.close 

更新1.After的建議,我還是得到這樣的: 回溯(最近呼叫最後): 文件「page.py」,第31行,在 homepage = urllib.urlopen(url) 文件「/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py」,第87行,在urlopen return opener.open(url) 文件「/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py」,行180,打開 fullurl =解包(toBytes(fullurl)) 文件「/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py」,第1057行,解包 url = url.strigget() AttributeError:'ParseResult'對象沒有屬性'strip'

+0

你並不需要檢查順便說一句,當你剛剛打開文件時,它就是文件模式。 –

回答

1

在第1部分中,您保留用新的覆蓋url URL。您應該使用一個列表,並追加網址到該列表:

urls = [] 
for tag in soup1.findAll('a', href = True): 
    raw_url = tag['href'][:-7] 
    url = urlparse.urlparse(raw_url) 
    urls.append(url) 
    p = "http"+str(url.path) # don't know what that's for, you're not using it later 

然後,在第2部分,您可以通過直接urls迭代。每次迭代都不應該覆蓋removed。 - 此外,不需要變量original你SEARCHTEXT不會被一個replace操作,因爲它返回一個新的字符串並保持原始單獨改變:

removed_list = [] 
for url in urls: 
    homepage = urllib.urlopen(url) 
    soup = BeautifulSoup(homepage) 

    for tag in soup.findAll('a',attrs={'name':'g_my.main.right.gifts.link-send'}): 
     searchtext = str(tag['href']) 
     removed = searchtext.replace("gifts?send=", "") 
     print removed 
     removed_list.append(removed) 

然後,在第3部分,您不必打開和關閉您輸出的每行文件。事實上,你甚至沒有正確關閉它,因爲你沒有調用close()方法。正確的方法是無論如何使用with statement

with open("1.csv", "w") as outfile: 
    for item in removed_list: 
     outfile.write(item + "\n") 

雖然我看不出這是一個CSV文件(僅每行一個項目?)...

+0

url = p。我用「從上面刪除的URL鏈接」代替'p' –

+0

你說得對。我寧願csv每行一個項目。 –

+0

哦,那麼它不是一個真正的逗號分隔的文件,是嗎? –