如何使用Python刮擦Quora问和答案

评论: 0

本文重点介绍了如何提取Quora数据以及为什么它有用,以及如何使用Python来自动化此任务。我们还将研究从该站点刮擦所需的主要工具和库。

为什么要刮擦Quora数据?

Quora是来自世界各地人们使用的最流行的提问网站之一。它在美国,英国,加拿大,澳大利亚和其他英语国家特别突出。分析Quora数据时有很多好处,例如:

  • 提供有关相关主题,专家分析和各个主题的趋势问题的最新信息。
  • 通过解决他们的询问并利用企业或个人专家声誉的信任来成功与目标受众互动。
  • 获得质量答案,共享经验和信息,而无需进行全面的广泛搜索。

该平台可用于研究,内容开发或构建AI解决方案。

了解Quora网络刮擦

网络刮擦是指从网站或网页中提取信息和数据的行为。这是收集大量信息并将其转换为有组织的结构(例如CSV文件)的现代方式。

什么是Web刮擦Quora平台给我们:

  • 问题本身。
  • 链接与某些Quora页面相对应。
  • 到目前为止,答案和问题的数量。
  • 撰写答案的人。
  • 他们发表的日期。

因此,Quora数据刮擦可深入了解用户参与,重要性以及不同问题的普及以及他们收到的答案。

刮擦Quora的基本工具

为了刮擦Quora Data Python库。以下是最相关的资源,它将使您能够实现该目标:

  • BeautifulSoup — 用于解析HTML页面并收集寻求的信息。
  • Requests — 用于制定超文本传输​​协议请求并获取网页。
  • Selenium — 用于浏览器自动化以及动态生成内容的捕获。

这些库使与网页交互并毫不费力地从Quora收集信息成为可能。

构建Quora刮擦Python脚本

该小节介绍了刮板的构建,这将是逐步关注的。准备工作空间,安装必要的库,创建用于发送请求的过程,解析HTML代码以及使用检索到的信息。

步骤1:设置您的Python项目环境

事先刮擦一个人必须准备工作环境:

  1. 从官方页面下载并安装Python。
  2. 设置虚拟环境,以将使用的库划分。
    
    python -m venv quora_scraper
    source quora_scraper/bin/activate  # 对于MacOS和Linux
    quora_scraper\Scripts\activate     # 对于Windows
    
    

步骤2:安装所需的Python库

在此步骤中安装Web刮擦所需的必要库:


pip install requests beautifulsoup4

这些接口对于传输HTTP请求并随后分析接收到的HTML数据至关重要。

步骤3:向Quora发送请求

要拨打某个API并重新获取HTML页面,我们将使用请求库。它是直观的,使工作很快完成。


url = "https://www.quora.com/How-do-you-open-your-own-company"
response = requests.get(url)

步骤4:解析HTML响应

为了使用Python,为了刮擦Quora答案,我们将需要另一个名为Beautifulsoup的库。这就是您安装它的方式:


soup = BeautifulSoup(response.text, "lxml")
question = soup.find(class_='q-box qu-userSelect--text')

步骤5:提取Quora问题和答案

要提取问题和答案,您只需要找到具有这些详细信息的所需的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)

步骤6:处理多页的分页

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)

步骤7:有效存储刮擦数据

收集数据后,您希望以一种使它们易于分析的方式保持。最好的方法是将其保持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)

步骤8:将数据导出到CSV或JSON格式

我们将数据保存到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)

步骤9:处理速率限制和阻止问题

Quora可以防止自动数据刮擦,因此试图向Quora发送大量请求将导致您切断您的IP地址。不过,有一些方法。

  1. 在发送下一个请求之前添加一些时间。

    这是人类行为的基本模仿,在发送请求时会增加某种形式的滞后。

    
    import time
    import random
    
    def random_delay():
        time.sleep(random.uniform(2, 5))
    
    

    在每个查询之后添加此功能,以增加没有阻塞的机会。

  2. 使用代理服务器。

    可以轻松避免使用代理服务器阻止IP地址。让我们看看如何与请求和Selenium一起使用。

    • requests:
      
      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)
      
      
    • Selenium:
      
      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)
      
      

步骤10:将所有内容放在一起

因此,在涵盖了所有步骤之后,是时候将它们组合成一个脚本了。


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,那么使用代理服务器是持续性能的必备服务。

评论:

0 评论