Моя основная задача - получить массив / список URL, которые не будут очищены во время URL веб-сайта. Очистите логику, как показано в примере кода ниже:
логика для ('scrapy.py'):
открытый URL в ('source') ~> найти теги 'a' из url in ('source') ~> найти 'href' в тегах 'a' ~>, если значение 'href' не равно ( ! =) ('done') в файле ('doneurls.py') ~> затем записать URL-адреса, которые не равны ('done'), в файл ('url.py')
Код, который я использую, это 'scrapy.py':
from bs4 import BeautifulSoup
import requests
import csv
import os
import sys
from os.path import dirname, join, abspath
sys.path.insert(0, abspath(join(dirname(__file__), '..')))
from doneurls import done
source = requests.get('http://localhost/index.php').text
soup = BeautifulSoup(source, 'lxml')
file = open('./url.py', 'a')
csv_writer = csv.writer(file)
from html.parser import HTMLParser
class MyHTMLParser(HTMLParser):
def handle_starttag(self,tag,attrs):
# Only parse the 'anchor' tag.
if tag == "a":
# Check the list of defined attributes.
for name, value in attrs:
# If href is defined, print it.
if name == "href":
if value != done:
csv_writer.writerow('b="'+value+'"')
parser = MyHTMLParser()
parser.feed(source)
file.close()
index.php:
<a href="http://localhost/next.php">hello</a>
<a href="http://localhost/next3.php">hello</a>
<a href="http://localhost/next2.php">hello</a>
<a href="http://localhost/next1.php">hello</a>
<a href="http://localhost/1.php">hello</a>
<a href="http://localhost/2.php">hello</a>
<a href="http://localhost/3.php">hello</a>
doneurls.py:
done = "http://localhost/2.php"
Этот код, кажется, работает, и он игнорирует только один URL-адрес, который я добавляю в doneurls.py, и работает хорошо, но я хочу добавить массив URL-адресов, чтобы сделать вот так
done = {
"http://localhost/2.php",
"http://localhost/next1.php",
"http://localhost/next2.php"}
Когда я пытаюсь запустить 'done' как массив, URL-адреса вообще не пропускаются. Я использую этот код, чтобы попытаться не перескакивать URL-адреса, которые я перебрал в прошлом.