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

一、内容更新

修改了crawl_page的部分逻辑,增加了对预先设定的关键词列表(content)的自动爬取,减少了由于反爬机制导致爬虫失败的概率
同时修改了文件保存路径和保存数量,按照每爬取250页网站(约5000条)保存至本地csv一次
共爬取约12w条数据

def crawl_page(start, end, content):
    i = 0
    t = 0
    lists.clear()
    for page_no in range(start, end + 1):
        driver.execute_script(js)
        time.sleep(3)
        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
		#每250页爬取结果自动存储(约5000条)
        if i == 249:
            i = 0
            save('./data' + content + str(t) + '.csv')
            t += 1
            lists.clear()
        else:
            i += 1
        time.sleep(random.randint(3, 6))
    if len(lists) != 0:
        save('./data' + content + str(t) + '.csv')
        lists.clear()
def crawler(contents):
    for content in contents:
        link = conf_set(content)
        driver.get(link)
        crawl_page(1, 500, content)
    driver.quit()


content_list = ['数据库', '机器学习', '计算机图形学']
# '人工智能', ,
# '算法设计', '数据结构', '大数据',  '程序语言代码', '计算复杂性理论', '密码学', '软件工程', '操作系统'
crawler(content_list)

二、出现的问题以及解决方案

1.由于翻页速度过快导致的页面不能完全显示

在这里插入图片描述
在这里插入图片描述

翻页元素可以通过class=page属性进行定位,当爬虫翻页速度过快时可能会导致"div class=page"标签下的页面元素失效从而返回cannot get elements的错误,同时包含有item-lists的文章也存在无法爬取的可能
在这里插入图片描述

知网空间的翻页只能通过多次点击之后跳转到后面的页面,当页面数量>300时,爬虫失效后,通过点击页面跳转的方式比较繁琐,因此解决方案主要在避免爬虫失效

time.sleep(random.randint(3, 6))

让进程随机等待3至6秒再进行翻页和爬取操作

try:
	a = driver.find_element_by_class_name("page").find_elements_by_class_name("n")[1]
    a.click()
except Exception as err:
   	print(err)

对翻页操作使用try-except语句,捕获错误,当出现无法继续翻页时,使爬虫正常停止而非运行错误

2.在切换关键词时导致的MaxRetryError:HTTPConnectionPool:

在使用webdriver时,向浏览器发送请求可能会失败,导致该错误,在排除网络原因后发现,如果在一个关键词爬取之后webdiver进程已经结束,因此后续的关键词爬取不能正常进行,解决方案为在爬取完所有关键词后再结束webdriver

最终爬取的数据量

共24个csv每个包含约5000条数据约120000条
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值