Хорошо, давайте разберем сайт и посмотрим, что мы можем сделать.
Во-первых, я вижу, что этот сайт разбит на страницы. Это означает, что нам приходится иметь дело с чем-то простым, например, с веб-сайтом, использующим часть строки запроса GET, чтобы определить, какую страницу мы запрашиваем для какого-то вызова AJAX, который заполняет таблицу новыми данными, когда вы нажимаете «Далее». Нажав на следующую и последующие страницы, нам повезло, что веб-сайт использует параметр запроса GET.
Наш URL для запроса очистки веб-страницы будет
https://www.zaubacorp.com/company-list/p-<page_num>-company.html
Мы напишем немного кода, который заполнит номер этой страницы значениями от 1 до последней страницы, которую вы хотите очистить. В этом случае нам не нужно делать ничего особенного, чтобы определить последнюю страницу таблицы, поскольку мы можем перейти к концу и обнаружить, что это будет страница 13,333. Это означает, что мы будем делать 13 333 запроса страниц на этот веб-сайт, чтобы полностью собрать все его данные.
Что касается сбора данных с веб-сайта, нам нужно будет найти таблицу, в которой хранится информация, и затем итеративно выбрать элементы, чтобы вытащить информацию.
В этом случае мы можем немного «обмануть», так как на странице кажется только один элемент. Мы хотим перебрать все и вытащить текст. Я собираюсь go наперед и напишу пример.
import requests
import bs4
def get_url(page_num):
page_num = str(page_num)
return "https://www.zaubacorp.com/company-list/p-1" + page_num + "-company.html"
def scrape_row(tr):
return [td.text for td in tr.find_all("td")]
def scrape_table(table):
table_data = []
for tr in table.find_all("tr"):
table_data.append(scrape_row(tr))
return table_data
def scrape_page(page_num):
req = requests.get(get_url(page_num))
soup = bs4.BeautifulSoup(req.content, "lxml")
data = scrape_table(soup)
for line in data:
print(line)
for i in range(1, 3):
scrape_page(i)
Этот код очистит первые две страницы сайта, и просто изменив диапазон для l oop, вы можете получить все 13,333 страницы. Отсюда вы можете просто изменить логи распечатки c для сохранения в формате CSV.