TypeError: объект 'list' не вызывается при очистке веб-страниц для добавления списков / значений к столбцу в CSV-файле - PullRequest
1 голос
/ 06 марта 2019

У меня есть этот TypeError: объект 'list' не вызывается в цикле for при вызове функций, которые я определил ранее. Я хочу добавить / ввести функции в мой цикл for для автоматического заполнения строк CSV столбцами

import requests
import bs4
from bs4 import BeautifulSoup
import pandas as pd
import time
import csv

# copy and paste the url from indeed using your search term
URL = 'https://www.indeed.com/jobs?q=data+science+summer+intern&l=New+York'

# conducting a request of the stated URL above:
page = requests.get(URL)

# specifying a desired format of “page” using the html parser - this allows python to read the various components of the page, rather than treating it as one long string.
soup = BeautifulSoup(page.text, 'html.parser')

# printing soup in a more structured tree format that makes for easier reading
print(soup.prettify())

Эта функция extract_job_title_from_result () извлекает из названия «должность» и добавляет ее в список «рабочих мест».

def extract_job_title_from_result(soup): 
    jobs = []
    for div in soup.find_all(name='div', attrs={'class':'row'}):
        for a in div.find_all(name='a', attrs={'data-tn-element':'jobTitle'}):
            jobs.append(a['title'])
    return(jobs)

extract_job_title_from_result = extract_job_title_from_result(soup)
print('extract_job_title_from_result is: ', extract_job_title_from_result)

output: extract_job_title_from_result is: ['Летний стажер инженера по данным', 'Летний стажер по науке о данных', 'Летний стажер по науке о данных', 'Интернат по статистическим исследованиям и науке о данных', 'Интернат по исследованию данных / анализу данных - лето 2019 года' ' , «Летняя стажировка 2019 года - Data Science Internship, Бейсбольные данные», «Data Science Летняя стажировка 2019 года», «Intern, Data Science», «Data Science Intern (анализ социальных медиа)», «Data Science Intern»]

# Set max result per city
max_results_per_city = 100
city_set = ['New+York','Chicago','San+Francisco', 'Austin', 'Seattle', 'Los+Angeles', 'Philadelphia', 'Dallas', 'Pittsburgh', 'Denver', 'Miami', 'Washington+DC','Jersey+City', 'Princeton']
columns = ['city', 'job_title', 'company_name', 'location', 'summary', 'salary']
sample_df = pd.DataFrame(columns = columns)
sample_df

вывод для sample_df в качестве заголовка столбца, но пока нет данных = город job_title company_name итоговая зарплата

Прямо сейчас я пытаюсь очистить и извлечь данные из Интернета. Я уже написал функции, которые работали и могут использовать эти функции для сохранения / добавления в столбец по имени столбца в CSV.

Я хочу собрать 100 результатов в каждом городе и сохранить / добавить эти данные, используя функции, которые я записал в CSV-файл.

for city in city_set:
    for start in range(0, max_results_per_city, 10):
        #ensuring at least 1 second between page grabs
        time.sleep(1)
        #soup = BeautifulSoup(page.text, 'lxml', from_encoding='utf-8')
        sample_df['job_title'] = extract_job_title_from_result(soup)

        ### Ignore the below functions. They worked individually but not here in this for loop. I'm using a function to try to make it work first before appending all functions to csv by column name

        #extract_company_from_result(soup)
        #extract_location_from_result(soup)
        #extract_salary_from_result(soup)
        #extract_summary_from_result(soup)
        #sample_df.loc[num] = job_post

sample_df.to_csv('/Users/KingKong1/AnacondaProjects/testing1.csv', encoding='utf-8')  

Я получил сообщение «TypeError: объект list не вызывается» из **sample_df['job_title'] = extract_job_title_from_result(soup)**

1 Ответ

2 голосов
/ 06 марта 2019

В extract_job_title_from_result = extract_job_title_from_result(soup) вы заменили функцию extract_job_title_from_result ее результатом, который представляет собой список.

Итак, в следующий раз, когда вы попытаетесь вызвать его, extract_job_title_from_result больше не будет именем функции, а будет ссылаться на этот список.

Используйте другое имя, например:

job_title = extract_job_title_from_result(soup)
print('job_title is: ', job_title)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...