как очистить несколько страниц в python с помощью bs4 - PullRequest
0 голосов
/ 03 мая 2020

У меня есть запрос, так как я удаляю веб-сайт "https://www.zaubacorp.com/company-list", так как не могу удалить идентификатор электронной почты из указанной ссылки в таблице. Хотя нужно счищать Имя, Электронная почта и Директора по ссылке в данной таблице. Может кто-нибудь, пожалуйста, разрешите мою проблему, так как я новичок ie в поиске в сети, используя python с красивым супом и просьбами.

Спасибо, Дикша

 #Scrapping the website
#Import a liabry to query a website
import requests
#Specify the URL
companies_list = "https://www.zaubacorp.com/company-list"
link = requests.get("https://www.zaubacorp.com/company-list").text
#Import BeautifulSoup
from bs4 import BeautifulSoup
soup = BeautifulSoup(link,'lxml')
soup.table.find_all('a')
all_links = soup.table.find_all('a')
for link in all_links:
    print(link.get("href"))

1 Ответ

0 голосов
/ 04 мая 2020

Хорошо, давайте разберем сайт и посмотрим, что мы можем сделать.

Во-первых, я вижу, что этот сайт разбит на страницы. Это означает, что нам приходится иметь дело с чем-то простым, например, с веб-сайтом, использующим часть строки запроса 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.

Output of the Code Running

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