Python 自动从quora中删除多个带有特定标签的问题?
我想从Quora中收集一些与某个特定主题相关的问题,这些问题有4个以上的答案 我想找到那个 a) 答案数目 b) 与每个问题关联的标签 这是我的节目: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
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先生,谢谢您的帮助。我希望现在的回答能帮助我删除“你已经达到了你的问题极限”。