Medium'dan makale çıkarmak, içerik değerlendirme, veri toplama veya yazarları ve çalışmalarını izleme gibi amaçlar için son derece önemli olabilir. Bu eğitimde, python programlama dilini kullanarak yazarlar için bir makale web sitesi olan medium'u nasıl kazıyacağımızı öğreneceğiz. Makale başlığı, yazar adı, yayın adı ve metin gövdesi gibi verilerin bir Medium makalesinin belirli bir web URL'sinden nasıl çıkarılabileceğini tartışacağız.
Bu eğitim için Medium'daki şu makaleden yararlanacağız: "Kodunuzu Önemli Ölçüde Optimize Eden 9 Python Yerleşik Dekoratörü".
Başlamadan önce aşağıdaki kütüphaneleri yükleyin:
Bunları aşağıdaki komutlarla kurun:
pip install requests
pip install lxml
pip install pandas
Medium, yetkisiz kazımayı önlemek için bot algılama teknikleri kullanır. Uygun başlıklar ve proxyler, bot tespitinden kaçınmak ve sorumlu kazıma için çok önemlidir.
Headers: Bunlar bir isteği gerçek bir tarayıcıdan geliyormuş gibi simüle eder. Tarayıcı türü, kabul edilen içerik türleri ve önbelleğe alma davranışı gibi bilgileri içerirler.
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-IN,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'priority': 'u=0, i',
'sec-ch-ua': '"Google Chrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
}
Proxy'ler: Proxy'ler IP adresinizi maskeleyebilir, isteklerin Medium tarafından engellenme olasılığını azaltmak için periyodik olarak döndürür. İşte IP adresi kimlik doğrulaması ile kullanımına bir örnek:
proxies = {
'http': 'IP:PORT',
'https': 'IP:PORT'
}
response = requests.get(
'https://medium.com/techtofreedom/9-python-built-in-decorators-that-optimize-your-code-significantly-bc3f661e9017',
headers=headers,
proxies=proxies
)
Başlıkların nasıl ayarlanacağı ve makale URL'sine nasıl istek gönderileceği aşağıda açıklanmıştır:
import requests
# Gerçek bir tarayıcı isteğini simüle etmek için başlıklar
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-IN,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'priority': 'u=0, i',
'sec-ch-ua': '"Google Chrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
}
url = 'https://medium.com/techtofreedom/9-python-built-in-decorators-that-optimize-your-code-significantly-bc3f661e9017'
response = requests.get(url, headers=headers)
Sayfa içeriğine sahip olduğumuzda, bunu ayrıştırabilir ve ilgili bilgileri çıkarabiliriz.
HTML yanıtını ayrıştırmak ve belirli öğeleri ayıklamak için lxml kullanacağız. İşte nasıl yapılacağı:
from lxml.html import fromstring
parser = fromstring(response.text)
# Veri ayıklama
title = parser.xpath('//h1[@data-testid="storyTitle"]/text()')[0]
author = parser.xpath('//a[@data-testid="authorName"]/text()')[0]
publication_name = parser.xpath('//a[@data-testid="publicationName"]/p/text()')[0]
publication_date = parser.xpath('//span[@data-testid="storyPublishDate"]/text()')[0]
content = '\n '.join(parser.xpath('//div[@class="ci bh ga gb gc gd"]/p/text()'))
auth_followers = parser.xpath('//span[@class="pw-follower-count bf b bg z bk"]/a/text()')[0]
sub_title = parser.xpath('//h2[@id="1de6"]/text()')[0]
Şimdi, çıkarılan tüm verileri tutmak için bir sözlük oluşturacağız. Bu, bir CSV dosyasına kaydetmeyi kolaylaştırır.
# Verileri bir sözlüğe kaydetme
article_data = {
'Title': title,
'Author': author,
'Publication': publication_name,
'Date': publication_date,
'Followers': auth_followers,
'Subtitle': sub_title,
'Content': content,
}
print(article_data)
Son olarak, daha fazla analiz veya kayıt tutma için verileri bir CSV dosyasına kaydedelim.
import pandas as pd
# Sözlüğü DataFrame'e dönüştürme ve CSV olarak kaydetme
df = pd.DataFrame([article_data])
df.to_csv('medium_article_data.csv', index=False)
print("Data saved to medium_article_data.csv")
İşte Medium makale verilerini kazımak için tam kod:
import requests
from lxml.html import fromstring
import pandas as pd
# Bir tarayıcıyı taklit etmek için başlıklar
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-IN,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'priority': 'u=0, i',
'sec-ch-ua': '"Google Chrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
}
proxies = {
'http': 'IP:PORT',
'https': 'IP:PORT'
}
# Sayfayı talep etme
url = 'https://medium.com/techtofreedom/9-python-built-in-decorators-that-optimize-your-code-significantly-bc3f661e9017'
response = requests.get(url, headers=headers, proxies=proxies)
# Sayfayı ayrıştırma
parser = fromstring(response.text)
# Veri ayıklama
title = parser.xpath('//h1[@data-testid="storyTitle"]/text()')[0]
author = parser.xpath('//a[@data-testid="authorName"]/text()')[0]
publication_name = parser.xpath('//a[@data-testid="publicationName"]/p/text()')[0]
publication_date = parser.xpath('//span[@data-testid="storyPublishDate"]/text()')[0]
content = '\n '.join(parser.xpath('//div[@class="ci bh ga gb gc gd"]/p/text()'))
auth_followers = parser.xpath('//span[@class="pw-follower-count bf b bg z bk"]/a/text()')[0]
sub_title = parser.xpath('//h2[@id="1de6"]/text()')[0]
# Veri kaydetme
article_data = {
'Title': title,
'Author': author,
'Publication': publication_name,
'Date': publication_date,
'Followers': auth_followers,
'Subtitle': sub_title,
'Content': content,
}
# CSV'ye Kaydet
df = pd.DataFrame([article_data])
df.to_csv('medium_article_data.csv', index=False)
print("Data saved to medium_article_data.csv")
Medium'dan içerik kazıma işlemi sorumlu bir şekilde yapılmalıdır. Sunucular üzerindeki aşırı istek yükü hizmetin performansını etkileyebilir ve izinsiz veri kazımak web sitesinin kullanım koşullarını ihlal edebilir. Herhangi bir web sitesini kazımadan önce her zaman robots.txt dosyasını ve şartları kontrol edin.
Yorumlar: 0