Очистка веб-страниц с использованием красивого супа дает неточные результаты - PullRequest
0 голосов
/ 25 мая 2020

Итак, я использую красивый суп и пытаюсь получить список компаний с сайта https://www.weps.org/companies. Эта функция, которую я сделал, просто берет URL-адрес «https://www.weps.org/companies?combine=&field_sector_target_id=All&field_company_type_value=All&field_number_of_employees_value=All&field_region_target_id=All&field_country_target_id=All&page=0» и добавляет 1 к последнему di git до его 310, чтобы получить список со всех страниц. Затем используется простой текст для получения данные и сохранены в CSV. У меня есть почти полный список, но некоторые не в хронологическом порядке, а иногда и повторяются. Я думаю, что в основном 95% или более данных точны, но некоторые из них изменены. Что может быть причиной ? Это мой код:

#!/usr/bin/python3

import requests
from bs4
import BeautifulSoup
import pandas as pd

company = []
types = []
requrl = "https://www.weps.org/companies?combine=&field_sector_target_id=All&field_company_type_value=All&field_number_of_employees_value=All&field_region_target_id=All&field_country_target_id=All&page=0"
reqlist = list(requrl)
j = 0
for i in range(0, 310):
    reqlist[-1] = j
    j = j + 1
    listToStr = ''.join([str(elem) for elem in reqlist])
    page = requests.get(listToStr)
    soup = BeautifulSoup(page.content, 'html.parser')
    company_only = soup.select(".field-content .skiptranslate")
    company = company + [cm.get_text() for cm in company_only]
    types_only = soup.select(".views-field-nothing .field-content")
    types = types + [tp.get_text() for tp in types_only]

data = pd.DataFrame({
    'Name': company,
    'Type | Location | Date': types# 'Type | Location | Data': types
})

data.to_csv(r 'finalfile.csv', index = False)

1 Ответ

1 голос
/ 26 мая 2020

Я попытался привести ваш код в порядок и использовать requests.session (). Ваш диапазон неверен, он попадает только на страницу 309. Я удалил пробелы, чтобы упростить синтаксический анализ.

#!/usr/bin/python3

import requests
from bs4 import BeautifulSoup
import pandas as pd

session = requests.session()
company = []
types = []
base_url = "https://www.weps.org/companies?combine=&field_sector_target_id=All&field_company_type_value=All&field_number_of_employees_value=All&field_region_target_id=All&field_country_target_id=All&page="
# The last page with data on is 310 so use range(0, 311).
for i in range(0, 311):
    page = session.get(f'{base_url}{i}')
    soup = BeautifulSoup(page.content, 'html.parser')
    company_only = soup.select(".field-content .skiptranslate")
    company = company + [cm.get_text().strip() for cm in company_only]
    types_only = soup.select(".views-field-nothing .field-content")
    types = types + [tp.get_text().strip() for tp in types_only]

data = pd.DataFrame({
    'Name': company,
    'Type | Location | Date': types# 'Type | Location | Data': types
})

data.to_csv(r'finalfile.csv', index=False)

Затем я подсчитал строки в файле:

cat finalfile.csv |  wc -l
3104

веб-сайт сообщал о 3103 компаниях, плюс заголовки в файле csv, это правильно.

Затем я подсчитал уникальные строки в файле:

cat finalfile.csv |  sort -u | wc -l
3091

Некоторые компании повторяются, поэтому я распечатал разница:

cat finalfile.csv | sort | uniq -d
Banco Amazonas S.A.,Banks  | Americas and the Caribbean | Ecuador | 09 May 2019
Careem,Software & Computer Services  | Arab States | Qatar | 13 May 2018
Careem,Software & Computer Services  | Asia and the Pacific | Pakistan | 13 May 2018
Hong Kong Exchanges and Clearing Limited,"Financial Services  | Asia and the Pacific | China, Hong Kong SAR |"
H?TAY PLAZA,General Retailers  | Europe and Central Asia | Turkey | 06 March 2019
"Kowa Co., Ltd.",Health Care Equipment & Services  | Asia and the Pacific | Japan | 17 September 2010
Madrigal Sports,General Industrials  | Asia and the Pacific | Pakistan | 05 December 2017
Novartis Corporativo S.A. de C.V.,Health Care Providers  | Global | Mexico | 07 February 2020
Poppins Corporation,Support Services  | Asia and the Pacific | Japan | 17 September 2010
Procter & Gamble Japan K.K.,Food & Drug Retailers  | Asia and the Pacific | Japan | 17 September 2010
"Shiseido Co., Ltd.",Personal Goods  | Asia and the Pacific | Japan | 17 September 2010
Tesco PLC,Food & Drug Retailers  | Europe and Central Asia | United Kingdom of Great Britain and Northern Ireland | 06 March 2019
Xiaohongshu,Internet  | Asia and the Pacific | China | 05 March 2020

Я повторил запуск скрипта и команд bash и получил тот же результат. Итак, я прихожу к выводу, что 3103 компаний, перечисленных на веб-сайте, имеют дубликаты на веб-сайте, и в результатах нет ничего пропавшего.

Просто чтобы проверить, я искал ключевое слово «Careem» и получил повторяющиеся результаты.

...