Веб-скрайпер 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)
Успех! У меня есть вывод. Но я обнаружил, что все   отображаются как Â. Это проблема кодировки и ее легко исправить:
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 и может быть использован для известных веб-сайтов.