【发布时间】:2020-10-21 14:30:39
【问题描述】:
我正在尝试通过 Selenium 和 python 抓取 https://arxiv.org/search/?query=healthcare&searchtype=allI。 for 循环执行时间过长。我尝试使用无头浏览器和 PhantomJS 进行抓取,但它没有抓取抽象字段(需要通过单击更多按钮来扩展抽象字段)
import pandas as pd
import selenium
import re
import time
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver import Firefox
browser = Firefox()
url_healthcare = 'https://arxiv.org/search/?query=healthcare&searchtype=all'
browser.get(url_healthcare)
dfs = []
for i in range(1, 39):
articles = browser.find_elements_by_tag_name('li[class="arxiv-result"]')
for article in articles:
title = article.find_element_by_tag_name('p[class="title is-5 mathjax"]').text
arxiv_id = article.find_element_by_tag_name('a').text.replace('arXiv:','')
arxiv_link = article.find_elements_by_tag_name('a')[0].get_attribute('href')
pdf_link = article.find_elements_by_tag_name('a')[1].get_attribute('href')
authors = article.find_element_by_tag_name('p[class="authors"]').text.replace('Authors:','')
try:
link1 = browser.find_element_by_link_text('▽ More')
link1.click()
except:
time.sleep(0.1)
abstract = article.find_element_by_tag_name('p[class="abstract mathjax"]').text
date = article.find_element_by_tag_name('p[class="is-size-7"]').text
date = re.split(r"Submitted|;",date)[1]
tag = article.find_element_by_tag_name('div[class="tags is-inline-block"]').text.replace('\n', ',')
try:
doi = article.find_element_by_tag_name('div[class="tags has-addons"]').text
doi = re.split(r'\s', doi)[1]
except NoSuchElementException:
doi = 'None'
all_combined = [title, arxiv_id, arxiv_link, pdf_link, authors, abstract, date, tag, doi]
dfs.append(all_combined)
print('Finished Extracting Page:', i)
try:
link2 = browser.find_element_by_class_name('pagination-next')
link2.click()
except:
browser.close
time.sleep(0.1)
【问题讨论】:
-
抓取的 df 每篇文章应该有 9 列:标题、id、链接、pdf 链接、作者、摘要、日期标签、doi。所以结果df应该是(1890 X 9)。我需要有关摘要链接的帮助,因为它有一个更多按钮,单击该按钮会给出我需要的扩展摘要,但我无法提取它!
-
请不要破坏您的帖子。这包括对帖子进行编辑以使现有答案无效或以其他方式使您的问题无法回答。
-
@user1234 要删除内容,版权所有者或其代理人需要以规定的方式发出 DMCA 删除通知。鉴于您说您无权发布代码,这意味着需要发布 DMCA 删除通知的是其他人。这并不意味着我们不愿意与您合作提出一个仍然是有效问题、不会使答案无效并且不包含您关注的代码的问题。但是,鉴于此问题和答案的具体情况,这并非易事(即您需要做很多工作)。
-
完成所有三件事的最有可能的解决方案是让您将问题中的代码重写为新代码,A) 仍然存在相同的问题,B) 不包含任何您认为不允许共享的代码中的哪些,并且不是该代码的衍生作品。然后,您需要得到为您回答的人的同意,将您的新代码集成到他们的答案中,同时仍然保持每个答案的质量,并以与最初相同的方式解决问题(例如,通过建议获得同意一个编辑)。
-
我可能还应该指出,即使从这里删除,在多个存档站点和多个镜像 SO 内容的站点上仍然会有副本。 SO 无法控制这些第三方网站,因此版权所有者需要单独查找和处理每个网站。虽然从此处删除它会降低其可见性,但它肯定不会将其从互联网上删除。将其从任何地方完全移除将是一项艰巨的任务,而且可能是不可能的(即,这困难并且需要大量时间/精力)。
标签: python selenium web-scraping optimization