Python 从从保存的html文件解析的url链接列表中解析标记的url链接。并将其保存在csv输出中

Python 从从保存的html文件解析的url链接列表中解析标记的url链接。并将其保存在csv输出中,python,csv,beautifulsoup,mechanize,urlparse,Python,Csv,Beautifulsoup,Mechanize,Urlparse,如何从第1部分顺利过渡到第2部分,并将结果保存到第3部分?到目前为止,除非我自己将其插入到第2部分中,否则我无法解析一个已删除的url链接。此外,我无法保存输出结果,因为最后一个url链接重写了所有其他链接 import urllib import mechanize from bs4 import BeautifulSoup import os, os.path import urlparse import re import csv 第1部分: path = '/Users/.../Des

如何从第1部分顺利过渡到第2部分,并将结果保存到第3部分?到目前为止,除非我自己将其插入到第2部分中,否则我无法解析一个已删除的url链接。此外,我无法保存输出结果,因为最后一个url链接重写了所有其他链接

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
第三部分

i = 0
for i in removed:
    f = open("1.csv", "a+")
    f.write(removed)
    i += 1
    f.close
更新1.在得到建议后,我仍然得到以下信息: 回溯(最近一次呼叫最后一次): 文件“page.py”,第31行,在 homepage=urllib.urlopen(url) urlopen中的文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py”,第87行 返回opener.open(url) 文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py”,第180行,打开 fullurl=展开(以字节为单位(fullurl)) 文件“/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py”,第1057行,展开格式 url=url.strip()
AttributeError:“ParseResult”对象没有属性“strip”

在第1部分中,您不断使用新url覆盖
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部分中,您可以直接迭代
url
。同样,删除的
不应在每次迭代中被覆盖。另外,不需要变量
original
-您的搜索文本不会被
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()
方法。正确的方法是使用以下选项:


虽然我看不出这是一个CSV文件(每行只有一个项目?)。

顺便说一句,当您自己刚刚打开文件时,不需要检查文件模式。url=p。我用“从上面刮来的URL链接”替换了“p”,你说得对。我更喜欢每行一个项目的csv。哦,好吧,那它不是一个逗号分隔的文件,是吗?
with open("1.csv", "w") as outfile:
    for item in removed_list:
        outfile.write(item + "\n")