Прекратить сканирование URL-адресов, если класс не существует в таблице Beautifulsoup и панд - PullRequest
0 голосов
/ 22 сентября 2018

Я использую список URL-адресов в CSV-файле для сканирования и извлечения данных из HTML-таблицы.Я хочу прекратить проходить через URL, когда 'style3' нет в таблице.Я создал функцию, которая будет возвращать false, если ее там нет, но я не совсем понимаю, как ее реализовать.

Любые предложения по решению или указания к литературе очень помогут, так как я не смог найти здесь что-нибудь, чтобы помочь мне понять это.

Я включил 1 URL с 'style3' и 1 без.Спасибо за любую помощь.

http://www.wvlabor.com/new_searches/contractor_RESULTS.cfm?wvnumber=WV057808&contractor_name=&dba=&city_name=&County=&Submit3=Search+Contractors http://www.wvlabor.com/new_searches/contractor_RESULTS.cfm?wvnumber=WV057924&contractor_name=&dba=&city_name=&County=&Submit3=Search+Contractors

import csv
from urllib.request import urlopen
import pandas as pd
from bs4 import BeautifulSoup as BS

def license_exists(soup):
    contents = []
    with open('WV_urls.csv','r') as csvf:
        urls = csv.reader(csvf)
        for url in urls:
            if soup(class_='style3'):
                return True
            else:
                return False

contents = []
more = True
while more:
    df  = pd.DataFrame(columns=['WV Number', 'Company', 'DBA', 'Address', 'City', 'State', 'Zip','County', 'Phone', 'Classification*', 'Expires']) #initialize the data frame with columns
    with open('WV_urls.csv','r') as csvf: # Open file in read mode
        urls = csv.reader(csvf)
        for url in urls:
            contents.append(url) # Add each url to list contents
        for url in contents:  # Parse through each url in the list.
            page = urlopen(url[0]).read()
            df1, header = pd.read_html(page,header=0)#reading with header
            more = license_exists(?????)
            df=df.append(df1) # append to dataframe

            df.to_csv('WV_Licenses_Daily.csv', index=False)

1 Ответ

0 голосов
/ 22 сентября 2018

Вы можете сделать это с помощью одного цикла for и break (нет необходимости в while more):

lst = []
with open('WV_urls.csv','r') as csvf: # Open file in read mode
    urls = csv.reader(csvf)
    for url in urls:
        page = urlopen(url[0]).read()
        df1, header = pd.read_html(page, header=0)
        if license_exists(BS(page, ‘html.parser’)):
            # if the license is present we don't want to parse any more urls.
            # Note: we don't append this last result (should we?)
            break
        lst.append(df1)

df = pd.concat(lst)
df.to_csv('WV_Licenses_Daily.csv', index=False)

Примечание: это создает окончательный DataFrame из спискаDataFrames, это более эффективно, чем добавление каждый раз.

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