python爬虫的心得与总结

914次阅读
没有评论

最近老板让搞python爬虫,提取地图中水库位置。在开展下一段探索前,先记一些心得体会。

一、工欲善其事必先利其器

想要爬取网站上的信息,必须有一个好的工具。firefox和chrome都有不错的工具,用chrome比较多,主要讲一下它的使用。喜欢探索细节的小伙伴移到下面的链接:《神器——Chrome开发者工具(一)》以及《chrome Dev tools》。我在这儿介绍一些高频使用的的功能。

1. F12:快捷键,(更多工具——开发者工具)。可以直接查看当前页面的html结构。有一点要注意,当前页面的html结构可能是Js动态生成的。比如淘宝网页的Josn数据源,但在开发者工具下是HTML结构。这个时候使用鼠标右键——查看源代码,可以看到json数据。

2.element选择键,F12后,下图中标示的方框内选项可以直接在页面中检索到对应的HTML标签位置——即在页面中点击选取。

python爬虫的心得与总结

3.console控制台,在这里可以看到一些与服务器的交互信息,上图中蓝色所指为清空,在此界面下,点击网页上的链接、按键或是F5刷新,可以看到与网页的交互信息。点击相应console下新出现的链接,可直接跳转到对应信息条目下。动态网页这个工具有很大的帮助,更多信息看第4条。控制台下可以输入一些变量函数,但因为没用到,所以没太多研究。有了解的可以分享下。

4.动态网页下,console控制台会出现一些链接,注意前面的信息:XHR。在这里插一点介绍,了解AJAX的小朋友可直接跳过。它是js进行http通讯的接口,现在也有新的版本,其实现动态刷新的工具。喜欢细节的看下面的链接《XMLHttpRequest Level 2》和《Introduction to XMLHttpRequest Level 2》以及《XMLHttpRequest–Living Standard》。好回到chrome工具,点击console下的链接后(下图中1),跳转到Network下,对应的信息文本会有几秒钟的变色,找不到的请注意上面的filter选项(下图中2)。network下各字段的一些信息,更多请看本段开头链接,这儿讲两个有用的:在name字段(下图中3)下点击鼠标左键,可查看返回的response信息;点击右键,可以复制curl信息,这点比较重要,待会有讲到。

python爬虫的心得与总结python爬虫的心得与总结

常用到的就这些,有其他的以后再更新。

二、磨刀不误砍柴工

这点体会太深了。我以前做过网页,了解其中的逻辑(如有需要了解网页及网页结构的小伙伴,强烈推荐《W3c school》)。对python编程也算是熟悉吧。然后我就直接上手去搞爬虫,爬虫多是第三方库,里面的一些参数的使用是必须了解其中意义的,不然很容易走弯路,我因此浪费了些时间。所以强烈建议:应该先抽出些时间了解这些常用到的工具的基本知识。事实上,python爬虫的这些库函数许多是相似的,了解起来并不费太多时间。

1.静态网页:静态网页以及少量表单交互的网站可以使用如下的技术路线:

requests + bs4 + re——分别是网页下载、BeautifulSoup提取网页结构信息和正则表达式。这三个为对应python库名,网上相关内容很多。

scrapy——是一种爬虫模块,可以配合re一块使用,也比较容易了解。以上内容的学习需要感谢Mooc网站北京理工大学的课程《Python网络爬虫与信息提取》,简单全面的介绍了静态爬虫的使用。

2.动态网页。简单动态网页,需要有点击或者提交的可以参考selenium + phantomJS组合使用。selenium是模拟浏览器操作的工具,phantomJS则是没有用户交互界面的“浏览器”,你可以认为是一种模拟用户点击操作的工具组合,来实现与服务器的交互。

我爬取的是网页地图中的信息,所以要更复杂一些。这也是下一阶段需要探索的东西,网上的资料也不是很多。不过现在也不是毫无头绪:对动态网页的逆向工程也是可以获取数据的。动态网页是使用JS动态加载的,在chrome工具中点击console工具,查看post的XHR信息,点击XHR返回信息的右键,可以查看curl,将此链接放到浏览器的地址栏,可以直接看到返回的json信息。这儿有个关键词:curl

当然,在没有出结果之前还不能确定现在的思路对于不对,对于复杂的动态网页,还需要更多的探索。先在此做个过去的总结,也欢迎了解和正在了解的给些意见。

神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试

相关文章:

版权声明:Python教程2022-10-24发表,共计1794字。
新手QQ群:570568346,欢迎进群讨论 Python51学习