Для цикла - запуск 1 цикла до завершения, затем запуск следующего цикла Python - PullRequest
0 голосов
/ 01 октября 2018

этот сценарий должен пройти весь путь через RI_page_urls.csv, затем выполнить все полученные URL-адреса из RI_License_urls.csv и получить бизнес-информацию.

он извлекает все URL-адреса из RI_page_urls.csv, но затем запускает и печатает первый из 100 URL-адресов из RI_License_urls.csv.Нужна помощь в выяснении, как заставить его ждать завершения первой части, прежде чем запускать вторую часть.

Я ценю любую помощь.

Вот URL для RI_page_urls.csv, с которого нужно начать:

http://www.crb.state.ri.us/verify_CRB.php

и код:

from bs4 import BeautifulSoup as soup
import requests as r
import pandas as pd
import re
import csv

#pulls lic# url
with open('RI_page_urls.csv') as f_input:
    csv_input = csv.reader(f_input)

    for url in csv_input:
        data = r.get(url[0])
        page_data = soup(data.text, 'html.parser')
        links = [r'www.crb.state.ri.us/' + link['href']
            for link in page_data.table.tr.find_all('a') if re.search('licensedetail.php', str(link))]

        df = pd.DataFrame(links)
        df.to_csv('RI_License_urls.csv', header=False, index=False, mode = 'a')
#Code Above works!

#need to pull table info from license url    
#this pulls the first record, but doesn't loop through the requests

with open('RI_License_urls.csv') as f_input_2:
    csv_input_2 = csv.reader(f_input_2)

    for url in csv_input_2:
        data = r.get(url[0])
        page_data = soup(data.text, 'html.parser')
        company_info = (' '.join(info.get_text(", ", strip=True).split()) for info in page_data.find_all('h9'))

        df = pd.DataFrame(info, columns=['company_info'])
        df.to_csv('RI_company_info.csv', index=False)

1 Ответ

0 голосов
/ 01 октября 2018

Что ж, вопрос немного неясен, и в коде есть пара неправильных вещей:

data = r.get(url[0])

должно быть, потому что его URL начинаются с http или https, а не с www

data = r.get("http://"+url[0])

В приведенном ниже коде

info не определено, поэтому я просто предположил, что оно должно быть company_info

 company_info = (' '.join(info.get_text(", ", strip=True).split()) for info in page_data.find_all('h9'))

        df = pd.DataFrame(info, columns=['company_info'])

Следовательно, полный код

from bs4 import BeautifulSoup as soup
import requests as r
import pandas as pd
import re
import csv

#pulls lic# url
with open('RI_page_urls.csv') as f_input:
    csv_input = csv.reader(f_input)

    for url in csv_input:
        data = r.get(url[0])
        page_data = soup(data.text, 'html.parser')
        links = [r'www.crb.state.ri.us/' + link['href']
            for link in page_data.table.tr.find_all('a') if re.search('licensedetail.php', str(link))]

        df = pd.DataFrame(links)
        df.to_csv('RI_License_urls.csv', header=False, index=False, mode = 'a')
#Code Above works!

#need to pull table info from license url    
#this pulls the first record, but doesn't loop through the requests

with open('RI_License_urls.csv') as f_input_2:
    csv_input_2 = csv.reader(f_input_2)
    with open('RI_company_info.csv','a',buffering=0) as companyinfofiledescriptor:
        for url in csv_input_2:
            data = r.get("http://"+url[0])
            page_data = soup(data.text, 'html.parser')
            company_info = (' '.join(info.get_text(", ", strip=True).split()) for info in page_data.find_all('h9'))

            df = pd.DataFrame(company_info, columns=['company_info'])
            df.to_csv(companyinfofiledescriptor, index=False)
            print(df)
...