Python/BS - Получение URL-адресов из html файлов, хранящихся в каталоге, сохранение в CSV файле

У меня есть папка, полная html файлов, и я пытаюсь очистить все URL-адреса, которые приводят к разным страницам, и сохранить эти URL-адреса в CSV файле.

Я читал здесь о Stackoverflow и пытался изменить код, который я использовал ранее, но не добился успеха. Python просматривает файлы, но он не может получить нужные мне данные.

Я написал свой первый код Python месяц назад, поэтому я все еще новичок, и я надеюсь, что кто-то там может помочь!

Код, который я использовал:

from bs4 import BeautifulSoup
import csv
import urllib2
import os

def processData( pageFile ):
 f = open(pageFile, "r")
 page = f.read()
 f.close()
 soup = BeautifulSoup(page)

 urldata = soup.findAll('a', {'href': True})

 urls = []


 for html in urldata:
 html = soup('<a href="123" target="_blank">qwe</a><a href="456" target="_blank">asd</a>')

 csvfile = open('url.csv', 'ab')
 writer = csv.writer(csvfile)

 for url in zip(urls):
 writer.writerow([url])

 csvfile.close()

dir = "myurlfiles"

csvFile = "url.csv"

csvfile = open(csvFile, 'wb')
writer = csv.writer(csvfile)
writer.writerow(["URLS"])
csvfile.close()

fileList = os.listdir(dir)

totalLen = len(fileList)
count = 1

for htmlFile in fileList:
 path = os.path.join(dir, htmlFile) # get the file path
 processData(path) # process the data in the file
 print "Processed '" + path + "'(" + str(count) + "/" + str(totalLen) + ")..." 
 count = count + 1

URL-адреса хранятся в html-коде следующим образом:

<div><code>&lt;div&gt;
 &lt;div&gt;&lt;a href="https://silkroad6ownowfk.onion.to/items/200mg-high-quality-dmt" target="_blank"&gt;200mg High Quality DMT&lt;/a&gt;&lt;/div&gt;
 &lt;div&gt;
 vendor: &lt;a href="https://silkroad6ownowfk.onion.to/users/ringo-deathstarr" target="_blank"&gt;ringo deathstarr&lt;/a&gt;
 ships from: United States
 ships to: Worldwide
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;div&gt;
 &lt;div&gt;฿0.031052&lt;/div&gt;
 &lt;a href="https://silkroad6ownowfk.onion.to/items/200mg-high-quality-dmt#shipping" target="_blank"&gt;add to cart&lt;/a&gt;
 &lt;/div&gt;</code> </div>
1 ответ

Вы можете использовать glob, чтобы найти все html файлы в каталоге с помощью маски *.html, найти все ссылки через BeautifulSoup find_all() и записать их в файл (похоже, здесь вообще не нужен модуль csv):

import glob
from bs4 import BeautifulSoup


path = 'myurlfiles/*.html'

urls = []
for file_name in glob.iglob(path):
 with open(file_name) as f:
 soup = BeautifulSoup(f)
 urls += [link['href'] for link in soup.find_all('a', {'href': True})]

with open("url.csv", "wb") as f:
 f.write("\n".join(urls))

Обратите внимание, что вам не нужно читать файл перед передачей его в конструктор BeautifulSoup - он также поддерживает объекты, подобные файлу. Кроме того, следуйте рекомендациям и используйте with менеджером контекста во время работы с файлами.

Надеюсь, это поможет.

licensed under cc by-sa 3.0 with attribution.