2014-11-16 2 views
1

Как я могу сделать плавный переход от части 1 к части 2 и сохранить результаты в Part3? До сих пор мне не удалось разобрать скребковый URL-адрес, если я сам не вставил его в часть 2. Кроме того, я не смог сохранить выходные результаты, поскольку последняя ссылка на url перезаписала все остальные.Разбор URL-ссылки для тега из списка ссылок URL-адресов, проанализированных из сохраненного файла html. И сохранить все это в csv ouput

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 

Update 1.After совет, я все еще получаю это: TraceBack (последний последний звонок): Файл «page.py», строка 31, в homepage = urllib.urlopen (url) Файл «/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py», line 87, in 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.strip() AttributeError: объект «ParseResult» не имеет атрибута «strip»

+0

Вам не нужно, чтобы проверить файловый режим, когда вы только что открыли файл самостоятельно, между прочим. –

ответ

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. Я заменил 'p' на "A SCRAPED URL LINK FROM ABOVE" –

+0

Вы правы. Я бы предпочел csv с одним элементом в строке. –

+0

Ну что ж, тогда это не файл, разделенный запятой, не так ли? –

 Смежные вопросы

  • Нет связанных вопросов^_^