2021山东大学创新项目实训04

实现定时获取最新发表论文

一、要点分析

实现此功能的关键在于每次爬取时能够获取最新发表的文章,知网空间的搜索查询中提供了该功能
在这里插入图片描述
使用如下代码点击会返回css查询器找不到对应属性的错误

ul = driver.find_element_by_class_name("rank.left")
trs = ul.find_elements_by_tag_name("a")
for tr in trs:
	driver.find_elements_by_tag_name("tr").get_attribute("onclick")

查找后发现是由于该标签栏的style中将display设置为none(即不显示),而使用selenium进行爬虫时不能对隐藏的页面元素进行操作
因此可以先通过css查询器获取隐藏元素的使其style 的display属性改为block来获取列表中的文本信息,

js1 = 'document.querySelectorAll("ul")[0].style.display="block";'
driver.execute_script(js1)

但是实际运行代码时会出现Message:element not interactable的错误

在这里插入图片描述
这是由于js执行后可以将html中的display属性改为block,因此可以通过css查询器定位到对应的页面元素,但是selenium不能对隐藏元素操作的问题并没有解决,因此需要通过模拟鼠标悬停来让对应标签显示

ActionChains(driver).move_to_element(ul).perform()

二、修改部分代码

def crawl_page(start, end, content):
    lists.clear()
    js1 = 'document.querySelectorAll("ul")[0].style.display="block";'
    driver.execute_script(js1)
    ul = driver.find_element_by_class_name("rank.left")
    ActionChains(driver).move_to_element(ul).perform()
    trs = ul.find_elements_by_tag_name("a")
    for tr in trs:
        if tr.get_attribute('textContent') == "按发表时间排序":
            tr.click()
            print('ok')

    for page_no in range(start, end + 1):
        driver.execute_script(js)
        time.sleep(1)
        crawl()
        try:
            a = driver.find_element_by_class_name("page").find_elements_by_class_name("n")[1]
            print(page_no, len(lists))
            a.click()
        except Exception as err:
            print(err)
        else:
            pass
        time.sleep(random.randint(3, 6))
    if len(lists) != 0:
        today = datetime.date.today()
        today = today.strftime("%Y%m%d")
        save('./data' + content + today + '.csv')
        lists.clear()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值