Daftar Isi
Langkah 3: Terapkan pengguliran untuk memuat konten dinamis
Untuk sepenuhnya menangkap jawaban yang dimuat secara dinamis di Quora, mari kita tentukan jawaban berikutnya scroll_to_bottom()
Fungsi.
Dalam fungsi ini pertama-tama kita mengakses bagian bawah halaman saat ini. Kemudian kita memasuki loop di mana kita mensimulasikan penekanan Tombol akhir Penggunaan send_keys()
Fungsi yang menggulir kita ke bawah.
Setelah setiap pengguliran, kami menunggu beberapa saat hingga konten baru dimuat. Kami memeriksa apakah kami benar-benar telah mencapai bagian bawah dengan membandingkan tinggi halaman sebelum dan sesudah menggulir. Jika tidak ada yang berubah, kita telah mencapai akhir dan setiap konten dimuat dan siap untuk kita cari.
def scroll_to_bottom(driver):
"""Scrolls the webdriver instance to the bottom of the page."""
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
driver.find_element(By.TAG_NAME, 'body').send_keys(Keys.END)
time.sleep(10)
new_height = driver.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
last_height = new_height
Langkah ini adalah kunci untuk memastikan kita tidak melewatkan apa pun yang dimuat secara dinamis saat kita menelusuri halaman.
Langkah 4: Ekstrak data dengan BeautifulSoup
Sekarang halaman kita telah dimuat sepenuhnya, saatnya menyelami konten dengan BeautifulSoup. Kami sedang mencari jawaban atas pertanyaan Quora kami, jadi mari buat jawaban scrape_answers()
Fungsi yang diambil alih oleh kita seleniumwire
Pengemudi sebagai argumen.
Dalam fungsi ini BeautifulSoup
mengambil sumber halaman dari driver kami dan mengubahnya menjadi struktur yang dapat dinavigasi. Kami menargetkan area konten utama tempat jawaban disimpan, yaitu div
elemen yang kami identifikasi sebelumnya dan ulangi setiap respons untuk menyaring elemen apa pun yang ditandai sebagai iklan.
def scrape_answers(driver):
soup = BeautifulSoup(driver.page_source, 'html.parser')
main_content = soup.find("div", attrs={"id": "mainContent"})
all_results = main_content.find_all("div", class_="q-click-wrapper qu-display--block qu-tapHighlight--none qu-cursor--pointer ClickWrapper___StyledClickWrapperBox-zoqi4f-0 iyYUZT")
non_ad_results = (result for result in all_results if not result.find_parents(class_="q-box dom_annotate_ad_promoted_answer"))
return non_ad_results
Langkah 5: Simpan data yang diekstraksi ke file CSV
Setelah Anda mengumpulkan semua hasilnya, saatnya mengatur dan menyimpannya untuk digunakan di masa mendatang. Untuk melakukan ini, kita akan membuat file CSV, format yang mudah dibaca dan dianalisis. Kami mendefinisikan a write_to_csv()
berfungsi untuk melakukan hal ini.
Kami mulai membuat quora_answers.csv. Lalu kami membuatnya csv.writer
Tolak dan gunakan untuk menulis header dengan "Pertanyaan", "Jawaban" dan "Suara positif".
def write_to_csv(results, query):
"""Writes the scraped results to a CSV file."""
with open('quora_answers.csv', 'w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(("Question", "Answer", "Upvotes"))
Kami dengan hati-hati mengekstraksi pertanyaan, jawabannya, dan yang terpenting, suara positif untuk setiap elemen data yang diekstraksi. Suara positifnya rumit karena tidak berada dalam struktur HTML langsung dari jawabannya, tetapi dalam div induk atau induk.
Kita gunakan find_parent()
untuk naik pohon HTML dari jawaban ke posisi suara positif
for result in results:
question = result.find('div', class_="q-text qu-dynamicFontSize--regular_title qu-fontWeight--bold qu-color--gray_dark_dim qu-passColorToLinks qu-lineHeight--regular qu-wordBreak--break-word")
answer = result.find('div', class_="q-box spacing_log_answer_content puppeteer_test_answer_content")
parent = result.find_parent("div")
upvote = parent.find("span", class_="q-text qu-whiteSpace--nowrap qu-display--inline-flex qu-alignItems--center qu-justifyContent--center")
answer_text = answer.text if answer else "No answer text available"
question_text = question.text.replace("Related", "") if question else query
upvote = upvote.text if upvote else "0"
Untuk setiap respons yang kami proses, kami mengumpulkan serangkaian data:
- Teks pertanyaan (dengan sedikit edit untuk menghapus teks “Terkait” dari pertanyaan untuk kejelasan)
- Teks tanggapan
- Jumlah suara positif
Jika kami tidak menemukan jawaban atau suara positif, kami menggunakan nilai default seperti "Teks jawaban tidak tersedia" atau "0".
writer.writerow((question_text, answer_text, upvote))
Setelah semua data ditulis, kami mencetak pesan konfirmasi yang menunjukkan berapa banyak tanggapan yang telah kami simpan ke file CSV kami.
print(f"Written {len(results)} answers to quora_answers.csv")
Langkah 6: Jalankan skrip pengumpulan data
Pada tahap ini, kami siap untuk menyatukan semuanya dan menjalankan skrip kami pada halaman pertanyaan Quora tertentu.
Pertama-tama kami mengonfigurasi WebDriver dengan proksi ScraperAPI untuk akses tanpa batas ke Quora dan menghindari kemungkinan penyumbatan dengan milik kami configure_selenium_wire_proxy()
Berfungsi dan meneruskan kunci API ScraperAPI kami sebagai argumen.
chrome_options = webdriver.ChromeOptions()
API_KEY = "YOUR_API_KEY"
proxy_options = configure_selenium_wire_proxy(API_KEY)
driver = webdriver.Chrome(options=chrome_options, seleniumwire_options=proxy_options)
Kami kemudian menyimpan pertanyaan kami di a query
Variabel dan buat URL untuk membuka halaman Quora yang tepat di mana pertanyaan ini berada.
Kami mengganti spasi di pertanyaan kami dengan tanda hubung agar sesuai dengan format URL Quora dan memastikan WebDriver kami tahu persis ke mana harus pergi.
query = "What is the easiest way to learn to code?"
driver.get(f"https://www.quora.com/{query.replace(' ', '-')}-q{query.replace(' ', '-')}")
Setelah menunggu untuk menggunakan halaman tersebut time.sleep(100)
kami melaksanakan tugas kami scroll_to_bottom()
untuk memastikan bahwa semua jawaban yang dimuat secara dinamis terlihat.
Berikutnya, scrape_answers()
mengumpulkan jawaban-jawaban ini dan write_to_csv()
menyimpannya dalam file CSV terstruktur.
time.sleep(100) # Initial wait for page to load
scroll_to_bottom(driver) # Scroll to the bottom of the page
answers = scrape_answers(driver) # Scrape non-ad answers
write_to_csv(answers, query) # Write the answers to a CSV file
Kami akan menempatkan semuanya di dalam satu try-except-finally
Memblokir.
Itu try
Blokir memastikan bahwa skrip kami mencoba menjalankan proses pengikisan selama except
Blok tersebut ada untuk menangani kesalahan apa pun dengan benar. Kami juga memastikan bahwa WebDriver ditutup dengan benar finally
-Klausul terlepas dari keberhasilan atau kegagalan skrip.
try:
query = "What is the easiest way to learn to code?"
driver.get(f"https://www.quora.com/{query.replace(' ', '-')}-q{query.replace(' ', '-')}")
time.sleep(100)
scroll_to_bottom(driver)
answers = scrape_answers(driver)
write_to_csv(answers, query)
except Exception as e:
print("An error occurred:", e)
finally:
driver.quit() # Ensure the driver is quit properly
Ringkasan
Kita berhasil! Kami menavigasi Quora menggunakan Selenium dan ScraperAPI untuk mengatasi semua rintangan dan mengumpulkan data. Hari ini kita membahas:
- Gunakan Python dan BeautifulSoup untuk mencari di Quora dan mengekstrak data Tanya Jawab yang berguna.
- Menyimpan data yang diekstraksi dalam file CSV memudahkan analisis kami.
- Memanfaatkan ScraperAPI dalam mode proksi dengan Selenium Wire untuk menavigasi pertahanan Quora dengan terampil guna mengakses wawasan publik.
Jika Anda memiliki pertanyaan, silakan hubungi tim dukungan kami; Kami siap membantu, atau lihat dokumentasi kami untuk mempelajari lebih lanjut tentang cara menggunakan ScraperAPI secara efektif.
Apakah Anda memerlukan lebih dari 3 juta kredit API per bulan? Hubungi bagian penjualan dan dapatkan paket khusus dengan dukungan premium dan manajer akun khusus.
Sampai jumpa lagi, selamat mengikis dan ingatlah untuk mengikis secara bertanggung jawab!