抓取网页数据违法吗(urllib2和urllib的第二种方案有什么区别?怎么做?)
优采云 发布时间: 2021-11-20 17:10抓取网页数据违法吗(urllib2和urllib的第二种方案有什么区别?怎么做?)
urllib2 和 urllib 是 python 自带的模块,可以用来发送和处理请求。API虽然更灵活,但使用起来不太方便,因此通常需要进行两次封装。做了封装,终于发现自己封装的模块是无限趋势的。已经接近一个非常成熟的requests库了,所以直接使用requests吧。当然,请求只发送和接受请求。对于页面分析,必须配合lxml或beautifulsoup等第三方库。高级爬虫不仅发送和处理请求,还需要处理异常、请求速度控制等问题。这需要我们编写额外的代码来控制。当然,我们可以自己写。这只是时间问题,但完全没有必要。
二、scrapy 框架
Scrapy 是爬虫采集的佼佼者。目前我做的项目都是scrapy进行的,不管复杂不复杂。对于请求调度,已经封装了异常处理,第三方scrapy-redis也可以支持分布式,我们专注于更重要的页面分析和规则编写。代码可以参考我github上的例子。
三、蟒蛇硒
这种方法被称为终极杀手。通常在实在没有办法的时候使用。当我使用某个搜索引擎爬取文章时,搜索引擎使用了更难的反爬虫机制。而且,不断的变化让人无法找到规律。最典型的特点就是cookie会随机隐藏在某个页面js和图片中。解决办法是模拟浏览器的行为,加载js等所有静态资源文件。如果自己写浏览器的话,分析的太无聊了。如果chrome浏览器能打开界面,通过chrome的加载方式获取页面内容就好了。这是硒。Selenium 加上随机等待时间可以模拟非常类似于人类的操作行为。缺点是速度慢,但一般的爬虫对爬行速度要求不高。重要的是稳定性。这种方法更适合爬取做的好的大型反爬虫机制。
综上所述,scrapy是用来直接解决大部分爬虫需求的。如果第一个或第三个解决方案无法解决,就这么简单。
在python爬虫上可以做什么
(1) 不同领域、不同背景的用户往往有不同的检索目的和需求。一般搜索引擎返回的结果中含有大量用户不关心的网页。
(2)通用搜索引擎的目标是最大化网络覆盖。有限的搜索引擎服务器资源和无限的网络数据资源之间的矛盾将进一步加深。
(3) 随着万维网上数据形式的丰富和网络技术的不断发展,图片、数据库、音频、视频、多媒体等各种数据大量出现,一般的搜索引擎往往无法这些具有密集信息内容和一定结构的数据。很好地发现和获取。
(4)一般搜索引擎大多提供基于关键字的搜索,难以支持基于语义信息的查询。
为了解决上述问题,针对相关网络资源进行针对性抓取的聚焦爬虫应运而生。Focus Crawler 是一个自动下载网页的程序。它根据建立的爬取目标有选择地访问万维网上的网页和相关链接,以获取所需的信息。不同于一般用途的网络爬虫,聚焦爬虫不追求大的覆盖范围,而是将目标设定为抓取与特定主题内容相关的网页,并为面向主题的用户查询准备数据资源。
防爬虫
1. 基本的反爬虫方法主要是检测请求头中的字段,如:User-Agent、referer等,这种情况下,只需要在请求中带上对应的字段即可。构造的http请求的字段最好和浏览器发送的字段完全一样,但不是必须的。
2. 基于用户行为的反爬虫方法主要是在后台统计访问过的IP(或User-Agent),超过一定阈值时进行拦截。针对这种情况,可以通过使用代理服务器来解决。每隔几次请求,切换使用的代理的IP地址(或使用User-Agent列表解决,每次从列表中随机选择一个使用)。这种反爬虫方法可能会误伤用户。
3. 如果你要抓取的数据是通过ajax请求获取的,如果通过网络分析可以找到ajax请求,并且还可以分析出请求需要的具体参数,直接对应http请求即可模拟的。在响应中获取相应的数据。在这种情况下,与正常请求没有区别。
4. 基于JavaScript的反爬虫方法主要是在响应数据页面之前返回一个带有JavaScript代码的页面,用于验证访问者是否有JavaScript执行环境,判断浏览器是否被使用.
正常情况下,这段JS代码执行完后,会发送一个带有参数key的请求,后台通过判断key的值来判断是响应真实页面还是假页面或者错误页面。由于关键参数是动态生成的,每次都不一样,很难分析其生成方式,导致无法构建对应的http请求。