本文重点介绍了如何提取Quora数据以及为什么它有用,以及如何使用Python来自动化此任务。我们还将研究从该站点刮擦所需的主要工具和库。
Quora是来自世界各地人们使用的最流行的提问网站之一。它在美国,英国,加拿大,澳大利亚和其他英语国家特别突出。分析Quora数据时有很多好处,例如:
该平台可用于研究,内容开发或构建AI解决方案。
网络刮擦是指从网站或网页中提取信息和数据的行为。这是收集大量信息并将其转换为有组织的结构(例如CSV文件)的现代方式。
什么是Web刮擦Quora平台给我们:
因此,Quora数据刮擦可深入了解用户参与,重要性以及不同问题的普及以及他们收到的答案。
为了刮擦Quora Data Python库。以下是最相关的资源,它将使您能够实现该目标:
这些库使与网页交互并毫不费力地从Quora收集信息成为可能。
该小节介绍了刮板的构建,这将是逐步关注的。准备工作空间,安装必要的库,创建用于发送请求的过程,解析HTML代码以及使用检索到的信息。
事先刮擦一个人必须准备工作环境:
python -m venv quora_scraper
source quora_scraper/bin/activate # 对于MacOS和Linux
quora_scraper\Scripts\activate # 对于Windows
在此步骤中安装Web刮擦所需的必要库:
pip install requests beautifulsoup4
这些接口对于传输HTTP请求并随后分析接收到的HTML数据至关重要。
要拨打某个API并重新获取HTML页面,我们将使用请求库。它是直观的,使工作很快完成。
url = "https://www.quora.com/How-do-you-open-your-own-company"
response = requests.get(url)
为了使用Python,为了刮擦Quora答案,我们将需要另一个名为Beautifulsoup的库。这就是您安装它的方式:
soup = BeautifulSoup(response.text, "lxml")
question = soup.find(class_='q-box qu-userSelect--text')
要提取问题和答案,您只需要找到具有这些详细信息的所需的HTML标签即可。让我们采取案例:
text_of_answers = []
for answer_id in range(6):
answers = soup.find_all(
class_=f'q-box dom_annotate_question_answer_item_{answer_id} qu-borderAll qu-borderColor--raised qu-boxShadow--small qu-mb--small qu-bg--raised')
for answer in answers:
text = answer.find('p', class_='q-text qu-display--block qu-wordBreak--break-word qu-textAlign--start')
text_of_answers.append(text)
Quora倾向于有很多答案,通常您需要经常滚动页面才能查看所有内容。为此,我们将使用Selenium来自动化网站。
下面是您如何设置Selenium并使用代理来更好地隐藏您的身份:
from selenium.webdriver.chrome.options import Options
from seleniumwire import webdriver as wiredriver
chrome_options = Options()
chrome_options.add_argument(f'--proxy-server={proxy_address}')
chrome_options.add_argument(f'--proxy-auth={proxy_username}:{proxy_password}')
chrome_options.add_argument("--headless")
driver = wiredriver.Chrome(options=chrome_options)
在Selenium中设置了所有内容后,您只需要提出HTTP请求,然后继续向下滚动并捕获这些数据文章:
url = "https://www.quora.com/How-do-you-open-your-own-company"
driver.execute_script('window.scrollBy(0, 1000)')
driver.get(url)
收集数据后,您希望以一种使它们易于分析的方式保持。最好的方法是将其保持JSON格式,因为它是最广泛使用的。
with open(f'quora_data.json', 'w', encoding='utf-8') as json_file:
json.dump(text_of_answers, json_file, ensure_ascii=False, indent=4)
我们将数据保存到JSON,但是在某些情况下,可能需要一次以多种格式进行。因此,在这里,您有一个函数可以做到这一点:
def export_data(data, csv_filename="quora_data.csv", json_filename="quora_data.json"):
save_to_csv(data, csv_filename)
save_to_json(data, json_filename)
export_data(text_of_answers)
Quora可以防止自动数据刮擦,因此试图向Quora发送大量请求将导致您切断您的IP地址。不过,有一些方法。
这是人类行为的基本模仿,在发送请求时会增加某种形式的滞后。
import time
import random
def random_delay():
time.sleep(random.uniform(2, 5))
在每个查询之后添加此功能,以增加没有阻塞的机会。
可以轻松避免使用代理服务器阻止IP地址。让我们看看如何与请求和Selenium一起使用。
url = "https://www.quora.com/How-do-you-open-your-own-company"
proxy = 'LOGIN:PASSWORD@ADDRESS:PORT'
proxies = {
"http": f"http://{proxy}",
"https": f"https://{proxy}",
}
response = requests.get(url, proxies=proxies)
proxy_address = ""
proxy_username = ""
proxy_password = ""
chrome_options = Options()
chrome_options.add_argument(f'--proxy-server={proxy_address}')
chrome_options.add_argument(f'--proxy-auth={proxy_username}:{proxy_password}')
chrome_options.add_argument("--headless")
driver = wiredriver.Chrome(options=chrome_options)
因此,在涵盖了所有步骤之后,是时候将它们组合成一个脚本了。
import json
from selenium.webdriver.chrome.options import Options
from seleniumwire import webdriver as wiredriver
from bs4 import BeautifulSoup
proxy_address = ""
proxy_username = ""
proxy_password = ""
chrome_options = Options()
chrome_options.add_argument(f'--proxy-server={proxy_address}')
chrome_options.add_argument(f'--proxy-auth={proxy_username}:{proxy_password}')
chrome_options.add_argument("--headless")
driver = wiredriver.Chrome(options=chrome_options)
url = "https://www.quora.com/How-do-you-open-your-own-company"
driver.execute_script('window.scrollBy(0, 1000)')
driver.get(url)
html = driver.page_source
soup = BeautifulSoup(html, "lxml")
question = soup.find(class_='q-box qu-userSelect--text')
# 答案
text_of_answers = [{'question': question}]
for answer_id in range(6):
answers = soup.find_all(
class_=f'q-box dom_annotate_question_answer_item_{answer_id} qu-borderAll qu-borderColor--raised qu-boxShadow--small qu-mb--small qu-bg--raised')
for answer in answers:
text = answer.find('p', class_='q-text qu-display--block qu-wordBreak--break-word qu-textAlign--start').text
text_of_answers.append({
'answers': text,
})
with open(f'Quora_data.json', 'w', encoding='utf-8') as json_file:
json.dump(text_of_answers, json_file, ensure_ascii=False, indent=4)
print(f"Quora_data.json")
在本文中,我们讨论了与Python刮擦的方法。这样的脚本构建的脚本使用户能够以各种格式(例如JSON和CSV)的分页和分页和数据节省来覆盖一些限制。
对于大规模数据收集,最有效的方法是使用Quora的API。另一方面,如果您从策略性地选择使用BeautifulSoup套或Selenium,那么使用代理服务器是持续性能的必备服务。
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
评论: 0