Python 自动从quora中删除多个带有特定标签的问题?

Python 自动从quora中删除多个带有特定标签的问题?,python,web-scraping,quora,Python,Web Scraping,Quora,我想从Quora中收集一些与某个特定主题相关的问题,这些问题有4个以上的答案 我想找到那个 a) 答案数目 b) 与每个问题关联的标签 这是我的节目: res=requests.get("https://www.quora.com/How-does-Quora-automatically-know-what-tags-to-put-for-a-question") soup=BeautifulSoup(res.text, 'lxml') # All the ans inside pagedli

我想从Quora中收集一些与某个特定主题相关的问题,这些问题有4个以上的答案

我想找到那个

a) 答案数目

b) 与每个问题关联的标签

这是我的节目:

res=requests.get("https://www.quora.com/How-does-Quora-automatically-know-what-tags-to-put-for-a-question")

soup=BeautifulSoup(res.text, 'lxml')
# All the ans inside pagedlist_item
ans=soup.find_all('div', {'class' : 'pagedlist_item'})


#Question Name inside question_text_edit
qname=soup.find('div', {'class' : 'question_text_edit'})
#qnam=soup.find('div', {'class' : 'question_text_edit'})


#Tag of Question
tags=soup.find('div', {'class' : 'QuestionTopicHorizontalList TopicList'})



#checking to see if "TV" is the tag of the question in the current webpage 
#Also, checking if no. of answers of the given question >=4, if yes then print the question
#logic for checking the conditions
no_ans=0;
if "TV" in tags.text:
    print(i.text)
    for a in ans:
        no_ans=no_ans+1
    if no_ans>=4:
        print(qname.text)
我想搜索许多带有标签
TV
的页面,然后在这些页面上执行检查以满足上述条件

检查条件的逻辑出现在代码末尾。但是,这只适用于网页中地址位于
requests.get(“”)函数内的一个问题

如何让代码自动迭代多个网页(多个问题),标记为“TV”,而不是将单个网页地址传递到
请求中。get(“”
函数


此外,我还想提出多个问题(多达40个左右)。

我将逐步回答这些问题:

我想搜索许多带有标签TV的此类页面,然后在这些页面上执行检查以满足上述条件。

好吧,如果你想抓取多个这样的页面,你必须从主题的根页面开始,这个页面有许多与特定主题相关的问题,然后开始抓取根页面中列出的这些问题的链接

此外,我还想提出多个问题(多达40个左右)

为此,您需要模拟滚动,以便在往下看时可以找到越来越多的问题

您不能直接使用
请求
美化组
来执行类似于模拟滚动操作的事件。下面是我在Python中使用
Selenium
库来满足您的需求的一段代码

注意

  • 安装

  • 使用
    pip安装-U selenium安装selenium

  • 如果您使用的是windows-executable_path='/path/to/chromedriver.exe'

  • 此代码要求2个链接,然后开始抓取“问题、答案数量、标签、4个答案”,并将其保存为csv格式

    键。向下翻页
    用于模拟滚动按钮。 不同的详细信息已附加到
    列表中,并在最后保存 进入
    csv
    文件

    此外,您还可以更改
    no\u of_pagedowns
    变量的值,以增加 你想要的卷轴

    import time
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    import csv
    
    
    with open('submission.csv','w') as file:
        file.write("Question,No. of answers,Tags,4 answers")
    
    link1 = input("Enter first link")
    #link2 = input("Enter second link")
    manylinks = list()
    manylinks.append(link1)
    #manylinks.append(link2)
    for olink in manylinks:
        qlinks = list()    
        browser = webdriver.Chrome(executable_path='/Users/ajay/Downloads/chromedriver')
        browser.get(olink)
        time.sleep(1)
        elem = browser.find_element_by_tag_name("body")
    
    
        no_of_pagedowns = 50
        while no_of_pagedowns:
            elem.send_keys(Keys.PAGE_DOWN)
            time.sleep(0.2)
            no_of_pagedowns-=1
        post_elems =browser.find_elements_by_xpath("//a[@class='question_link']")
        for post in post_elems:
            qlink = post.get_attribute("href")
            print(qlink)
            qlinks.append(qlink)
    
        for qlink in qlinks:
    
            append_status=0
    
            row = list()
    
            browser.get(qlink)
            time.sleep(1)
    
    
            elem = browser.find_element_by_tag_name("body")
    
    
            no_of_pagedowns = 1
            while no_of_pagedowns:
                elem.send_keys(Keys.PAGE_DOWN)
                time.sleep(0.2)
                no_of_pagedowns-=1
    
    
            #Question Names
            qname =browser.find_elements_by_xpath("//div[@class='question_text_edit']")
            for q in qname:
                print(q.text)
                row.append(q.text)
    
    
            #Answer Count    
            no_ans = browser.find_elements_by_xpath("//div[@class='answer_count']")
        #    print("No. of ans :")
            for count in no_ans:
        #        print(count.text)
                append_status = int(count.text[:2])
    
                row.append(count.text)
    
            #Tags
            tags = browser.find_elements_by_xpath("//div[@class='header']")
        #    print("\nTag :")
            tag_field = list()
            for t in tags:
                tag_field.append(t.text)
        #        print(t.text,'\n')
            row.append(tag_field)
    
    
            #All answers
            all_ans=browser.find_elements_by_xpath("//div[@class='ui_qtext_expanded']")
            i=1
            answer_field = list()
            for post in all_ans:
                if i<=4:
                    i=i+1
        #            print("Answer : ")
        #            print(post.text)
                    answer_field.append(post.text)
                else:
                    break   
            row.append(answer_field)
    
    
            print('append_status',append_status)
    
            if append_status >= 4:
                with open('submission.csv','a') as file:
                    writer = csv.writer(file)
                    writer.writerow(row)
    
    导入时间
    从selenium导入webdriver
    从selenium.webdriver.common.keys导入密钥
    导入csv
    打开('submission.csv','w')作为文件:
    文件。填写(“问题、答案数量、标签、4个答案”)
    link1=输入(“输入第一个链接”)
    #link2=输入(“输入第二个链接”)
    manylinks=list()
    manylinks.append(link1)
    #manylinks.append(link2)
    对于多联机中的olink:
    qlinks=list()
    browser=webdriver.Chrome(可执行文件路径='/Users/ajay/Downloads/chromedriver')
    browser.get(olink)
    时间。睡眠(1)
    元素=浏览器。通过标记名称(“主体”)查找元素
    第页中的第页=50页
    虽然没有任何页面下载:
    元素发送键(键。向下翻页)
    睡眠时间(0.2)
    第页中的第页-=1页
    post_elems=browser.find_elements_by_xpath(//a[@class='question\u link']))
    对于post in post_元素:
    qlink=post.get_属性(“href”)
    打印(qlink)
    追加(qlink)
    对于qlink中的qlink:
    附加\u状态=0
    行=列表()
    browser.get(qlink)
    时间。睡眠(1)
    元素=浏览器。通过标记名称(“主体”)查找元素
    第页中的第页=1页
    虽然没有任何页面下载:
    元素发送键(键。向下翻页)
    睡眠时间(0.2)
    第页中的第页-=1页
    #问号
    qname=browser。通过xpath(“//div[@class='question\u text\u edit'])查找元素
    对于qname中的q:
    打印(q.text)
    行追加(q.text)
    #回答计数
    no_ans=browser。通过xpath(“//div[@class='answer\u count'])查找元素
    #打印(“ans数量:”)
    对于“无”计数:
    #打印(count.text)
    append_status=int(count.text[:2])
    行.append(count.text)
    #标签
    tags=browser.find_elements_by_xpath(“//div[@class='header']))
    #打印(“\n标记:”)
    标记\字段=列表()
    对于t in标签:
    tag_field.append(t.text)
    #打印(t.text,“\n”)
    行。追加(标记\字段)
    #所有答案
    all_ans=browser.find_elements_by_xpath(“//div[@class='ui\u qtext\u expanded']))
    i=1
    答案\字段=列表()
    在所有区域发布:
    如果i=4:
    打开('submission.csv','a')作为文件:
    writer=csv.writer(文件)
    writer.writerow(行)
    
    从查看
    curl
    开始,您也可以开始查看BeautifulSoup@AjaySinghNegi方法正如我所描述的:找出你,一个人类,会手工做什么来获得所有这些页面的列表,然后自动生成列表的过程。例如,如果你作为一个人类,必须点击Quora文章上的[TV]标签,以获得所有关于电视的Quora问题列表,那么你现在知道你必须构建一个机器人来为你点击该标签。对我来说似乎很简单,我不知道你在这里寻求帮助缺少什么。不管你作为一个手工操作的人会做什么,都要使之自动化。@AjaySinghNegi你不需要框架。只需编写代码。这个问题没什么特别的。这是日常编程。这在很大程度上是程序所做的,也是程序编写的初衷:自动完成人类必须完成的任务。@DanBron先生,谢谢您的帮助。我希望现在的回答能帮助我删除“你已经达到了你的问题极限”。