Анализатор HTML в CSV, нет результатов в выходной папке - PullRequest
0 голосов
/ 24 сентября 2019

Я использовал BeautifulSoup, чтобы очистить веб-сайт и сохранить его в формате CSV.Когда я открываю CSV, там только заголовок, заголовок и нет данных (ссылки, которые я очистил).

Я уже пробовал "lxml", поэтому я переключился на html.parser.

from bs4 import BeautifulSoup  
import requests
import csv

page = requests.get('https://www.census.gov/programs-surveys/popest.html')
raw_html = page.text    # declare the raw_html var

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

T = [["US Census Bureau Links"]] #Title
I = page.text

for link in soup.find_all('a', href=True):
    print(link['href'])

with open("US_Census_Bureau_links.csv","w",newline="") as f:    
    cw=csv.writer(f)                          
    cw.writerows(T)                             
    cw.writerows(I)                             

f.close()                                      

Когда я запускаю его, я получаю 8 страниц, заполненных ссылками.но нет ссылок в выводе csv.

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Вы пишете в свой CSV-файл, который вы

cw.writerows(T)

Но

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

, и он пуст, когда вы объявляете его, и остается пустым, когда вы пишете, потому что вы этого не делаетедобавить любые ссылки на него.Поэтому измените ваш цикл for на: [Отредактировано в соответствии с комментариями @ vladwoguer ниже}

for link in soup.find_all('a', href=True):
     T.append([link['href']])

, и оно должно работать.

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

Вы можете извлечь ссылки на коллекцию, а затем записать ее в файл:

from bs4 import BeautifulSoup  
import requests
import csv

page = requests.get('https://www.census.gov/programs-surveys/popest.html')
raw_html = page.text    # declare the raw_html var

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

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

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

with open("US_Census_Bureau_links.csv","w",newline="") as f:    
    cw=csv.writer(f, quoting=csv.QUOTE_ALL)                          
    cw.writerows(T)                             
    cw.writerow(links)                         

f.close()                                      

Если вы хотите одну ссылку в каждой строке:

with open("US_Census_Bureau_links.csv","w",newline="") as f:    
    cw=csv.writer(f, quoting=csv.QUOTE_ALL)                          
    cw.writerows(T)
    for link in links:                      
      cw.writerow([link])                 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...