Соскрести абсолютный URL с html.parse и удалить дубликаты - PullRequest
0 голосов
/ 26 сентября 2019

Я пытаюсь убедиться, что относительные ссылки сохраняются как абсолютные ссылки в этот CSV.(URL-разбор) Я также пытаюсь удалить дубликаты, поэтому я создал переменную "ddupe".

Я сохраняю все относительные URL-адреса, сохраненные при открытии CSV на рабочем столе.Может кто-нибудь помочь мне разобраться?Я думал о вызове «set» так же, как эта страница: Как удалить дубликаты из списка при сохранении порядка?

#Importing the request library to make HTTP requests
#Importing the bs4 library to extract / parse html and xml files
#utlize urlparse to change relative URL to absolute URL
#import csv (built in package) to read / write to Microsoft Excel
from bs4 import BeautifulSoup  
import requests
from urllib.parse import urlparse
import csv

#create the page variable
#associate page to request to obtain the information from raw_html
#store the html information in a text
page = requests.get('https://www.census.gov/programs-surveys/popest.html')
parsed = urlparse(page)
raw_html = page.text    # declare the raw_html variable

soup = BeautifulSoup(raw_html, 'html.parser')  # parse the html

#remove duplicate htmls
ddupe = open(‘page.text’, ‘r’).readlines() 
ddupe_set = set(ddupe)
out = open(‘page.text’, ‘w’)
for ddupe in ddupe_set:
    out.write(ddupe)

T = [["US Census Bureau Links"]] #Title

#Finds all the links
links = map(lambda link: link['href'], soup.find_all('a', href=True)) 

with open("US_Census_Bureau_links.csv","w",newline="") as f:    
    cw=csv.writer(f, quoting=csv.QUOTE_ALL) #Create a file handle for csv writer                          
    cw.writerows(T)             #Creates the Title
    for link in links:                                  #Parses the links in the csv
    cw.writerow([link])                        

f.close()       #closes the program  

1 Ответ

0 голосов
/ 26 сентября 2019

Функция, которую вы ищете: urljoin, а не urlparse (обе из одной и той же упаковки urllib.parse).Его следует использовать где-то после этой строки:

links = map(lambda link: link['href'], soup.find_all('a', href=True))

Используйте понимание списка или map + lambda, как вы делали здесь, чтобы объединить относительные URL с базовыми путями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...