Веб-скрайпер ChatGPT

Предисловие

Прежде всего, отказ от ответственности…. При любом веб-скрайпинге убедитесь, что у вас есть разрешение от владельца сайта! Проверьте условия и положения, чтобы убедиться, что там нет пунктов, запрещающих скрайпинг. Проверьте авторские и юридические права в том месте, где вы находитесь и откуда вы делаете скрайп.

Уважайте пожелания владельцев сайта! Не нарушайте авторские права и не нарушайте закон!

Веб-скрайпер

У всех есть потребность иногда соскабливать веб-контент (конечно, с соблюдением закона и этических норм!). Я решил попробовать это на ChatGPT. И обнаружил, что это просто и эффективно.

Вот мой путь (обратите внимание, что я отредактировал все ссылки на веб-адрес)

напишите веб-скрапер на python, используя beautiful soup. сделайте скрейп с этого сайта: https://xxxxxx.com. найдите элемент с тегом “li” и классом “article”. найдите все элементы “a”, вложенные ниже этого. добавьте “https://xxxxxx.com” к передней части каждой ссылки. перейдите на каждую страницу по ссылке и сделайте скрейп всех элементов с “div” и классом “article-body”. Сохраните все в одном html-файле по адресу: /Users/wayneberry/Downloads/.

import requests
from bs4 import BeautifulSoup

# URL of the main page
url = "https://xxxxxxxxxxxxx.com"

# Create a session
session = requests.Session()
response = session.get(url)
soup = BeautifulSoup(response.content, "html.parser")

# Find the 'li' elements with class 'article'
articles = soup.find_all("li", class_="article")

# List to store scraped data
scraped_data = []

# Loop through each 'li' element
for article in articles:
    # Find all 'a' elements nested below the 'li' element
    links = article.find_all("a")
    for link in links:
        # Get the URL and prepend the base URL
        article_url = "https://xxxxxxxxxxxx.com" + link["href"]
        article_response = session.get(article_url)
        article_soup = BeautifulSoup(article_response.content, "html.parser")
        # Find the 'div' elements with class 'article-body'
        divs = article_soup.find_all("div", class_="article-body")
        # Append the scraped data to the list
        scraped_data.extend(divs)

# Create an HTML file to save the scraped data
file_path = "/Users/wayneberry/Downloads/scraped_data.html"
with open(file_path, "w") as file:
    # Write the HTML structure and the scraped data to the file
    file.write("<html><body>")
    for data in scraped_data:
        file.write(str(data))
    file.write("</body></html>")

print("Scraping complete. Data saved at:", file_path)

Пустой файл! Время копать глубже. Похоже, я что-то напутал в своем первоначальном запросе. Нет элемента “div” с классом “article-body”. Элементом является “article”.

Это неправильно: divs = article_soup.find_all(“div”, class_=”article-body”). изменить элемент на article не div

import requests
from bs4 import BeautifulSoup

# URL of the main page
url = "https://xxxxxxxxxxxxx.com"

# Create a session
session = requests.Session()
response = session.get(url)
soup = BeautifulSoup(response.content, "html.parser")

# Find the 'li' elements with class 'article'
articles = soup.find_all("li", class_="article")

# List to store scraped data
scraped_data = []

# Loop through each 'li' element
for article in articles:
    # Find all 'a' elements nested below the 'li' element
    links = article.find_all("a")
    for link in links:
        # Get the URL and prepend the base URL
        article_url = "https://xxxxxxxxxxxx.com" + link["href"]
        print("Visiting:", article_url)
        article_response = session.get(article_url)
        article_soup = BeautifulSoup(article_response.content, "html.parser")
        # Find the 'article' elements with class 'article-body'
        article_bodies = article_soup.find_all("article", class_="article-body")
        # Append the scraped data to the list
        scraped_data.extend(article_bodies)

# Create an HTML file to save the scraped data
file_path = "/Users/wayneberry/Downloads/scraped_data.html"
with open(file_path, "w") as file:
    # Write the HTML structure and the scraped data to the file
    file.write("<html><body>")
    for data in scraped_data:
        file.write(str(data))
    file.write("</body></html>")

print("Scraping complete. Data saved at:", file_path)

Успех! У меня есть вывод. Но я обнаружил, что все &nbsp отображаются как Â. Это проблема кодировки и ее легко исправить:

set <meta charset=”utf-8″> in the head

import requests
from bs4 import BeautifulSoup

# URL of the main page
url = "https://xxxxxxxxxxxx.com"

# Create a session
session = requests.Session()
response = session.get(url)
soup = BeautifulSoup(response.content, "html.parser")

# Find the 'li' elements with class 'article'
articles = soup.find_all("li", class_="article")

# List to store scraped data
scraped_data = []

# Loop through each 'li' element
for article in articles:
    # Find all 'a' elements nested below the 'li' element
    links = article.find_all("a")
    for link in links:
        # Get the URL and prepend the base URL
        article_url = "https://xxxxxxxxxxxxx.com" + link["href"]
        print("Visiting:", article_url)
        article_response = session.get(article_url)
        article_soup = BeautifulSoup(article_response.content, "html.parser")
        # Find the 'article' elements with class 'article-body'
        article_bodies = article_soup.find_all("article", class_="article-body")
        # Append the scraped data to the list
        scraped_data.extend(article_bodies)

# Create an HTML file to save the scraped data
file_path = "/Users/wayneberry/Downloads/scraped_data.html"
with open(file_path, "w", encoding="utf-8") as file:
    # Write the HTML structure and the scraped data to the file
    file.write("<html><head><meta charset='utf-8'></head><body>")
    for data in scraped_data:
        file.write(str(data))
    file.write("</body></html>")

print("Scraping complete. Data saved at:", file_path)

Успех. У меня есть html-файл с полученными данными. Он сохранил всю html-разметку и форматирование, чего я и добивался.

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

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

Также обязательно ознакомьтесь с плагином скрепера OpenAI, который доступен пользователям Plus и может быть использован для известных веб-сайтов.

+1
0
+1
0
+1
0
+1
0
+1
0

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *