打开新世界的大门——基于selenium的简易“爬虫”

本文详细介绍了如何利用Selenium和XPath爬取GitHub上的项目信息,包括搜索特定语言的热门项目,解析网页结构,获取项目详情页信息,并存储到CSV文件中。在爬取过程中,注意避免反扒机制,适时保存进度,以及处理可能出现的网络问题。爬取数据包括项目名称、star、watch、fork和标签等关键指标。
摘要由CSDN通过智能技术生成

前言

当年发现selenium的时候宛如打开新世界的大门,使用起来简单易上手,对于新手十分友好。在anaconda上安装selenium即可使用。其优势在于可以和chrome浏览器提供的xpath完美结合,简化了分析标签的过程。

本次爬虫暂时先以爬取GitHub上不同语言下不同热度的项目及其fork, watch, star和标注的标签作为练习。

1.目标网页爬取分析

首先在GitHub上搜索java,点击most stars,网站会根据star数目将GitHub上代管的java语言编写的项目降序排序,分析其连接,使用的是显示传参,方便解析。

https://github.com/search?o=desc&p=2&q=java&s=stars&type=Repositories

GitHub搜索

其中,o代表升序或者是降序,p表示页码,s表示排序的依据,q表示搜索的关键字,可以根据自己的需要进行替换,但是这里对于每个项目只显示了star数目,没有显示其他有用的信息,所以需要到每一个项目具体的展示页才能看到所有的信息。

所幸,每个项目自己的详细页面是由https://github.com/ 和用户名+项目名组成的,所以可以先将搜索页面里的项目名称存到本地数据文件中,再顺序索引访问。

总的来说,本次爬虫需要爬取的网页有两部分,一部分是项目列表,另一部分是每个项目的具体信息。

2.网页信息获取

开头说道,之所以使用selenium,就是为了能够结合xpath,简化数据获取的过程,那么如何通过chrome获得想要获取的内容呢?

首先,当打开任意界面后,在想获取的内容上面右键单击,选择“检查”,

检查

此时,浏览器会自动展示需要的内容所对应的html标签,为了获得需要信息在当前页面的路径,可以将鼠标放在高亮块上,右键单击复制XPath,

xpath

此时,使用Ctrl V就可以将其路径复制到任意文本或者代码中了。

3.selenium使用

selenium开发之初是自动测试框架,但是因为完善的网页操作,所以也可以当作爬虫使用,其使用过程也很简单。

首先,需要给chrome浏览器安装chromedriver.exe驱动,只需要将exe文件放在anaconda的script下即可;

之后,在代码中,编写如下代码,即可启动该测试框架;

driver = webdriver.Chrome()
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

此时,会弹出一个受控的浏览器,调用get(nextpage)函数( nextpage 是目标链接);

driver.get(nextpage)

浏览器就会跳转到目标页面,

这时候就用到了上文获取的xpath信息,通过find_element_by_xpath()函数,即可获得标签块,如果要获得文本,只需要再调用一次.text属性,

content=driver.find_element_by_xpath('//*[@id="js-pjax-container"]/div/div[3]/div/ul/li['3']/div[2]/div[1]/a').text

此时,需要获得的属性就已经存到了content里面。

按照这种方法,就可以将需要获得信息依次存储到本地的变量中。

4.数据存储

因为数据量比较大,所以需要存储到本地文件中,这里为方便起见使用excel,存储代码如下(不完整):

f = open("E://Pycharm//deleted//software_spider//result//res_"+language_type[language_index]+".csv", "w", encoding='utf-8')
writer = csv.writer(f)
content=["subject", "watch", "star", "fork"]
for iii in range(0,len(taglist)):
   content.append(taglist[iii])

writer.writerow(content)
f.close()

使用csv库的优势是方便后续继续添加。

5.爬取注意事项

(1)为了避免频繁访问触发网站反扒机制,此处在每次网页跳转前会调用系统函数time.sleep()挂起若干秒,这样才能持续访问,经测试,比较合适的间隔大概为7秒;

(2)因为连接过程不一定一直保持稳定,所以建议每执行一段时间就自动保存当前的内容,防止因为网络连接问题前功尽弃;

(3)对于xpath不方便解析的情况,可以使用beautifulsoup进行解析;

6.结果

本次针对Java. C, Python等十种编程语言进行爬取分析,每种编程语言下爬取star最多的100个项目,中等star数的50个项目,和star数较少的50个项目。共计爬取2000个项目,每个项目包含了star, watch, fork和标注的标签信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值