当前位置:首页 > 编程问答 >

学习Python爬虫的技巧有哪些

提问时间:2020年05月21日 16:34:51问题被 165 网友关注
共 1 个关于“Python爬虫有哪些小技巧”精选答案
顾昊然
推荐于:2020-05-21
最佳回答

使用代理IP

开发爬虫过程中经常会遇到IP被封掉的情况,这时就需要用到代理IP;

在urllib2包中有ProxyHandler类,通过此类可以设置代理访问网页,

Cookies处理

cookies是某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密),python提供了cookielib模块用于处理cookies,cookielib模块的主要作用是提供可存储cookie的对象,以便于与urllib2模块配合使用来访问Internet资源.

伪装成浏览器

某些网站反感爬虫的到访,于是对爬虫一律拒绝请求。所以用urllib2直接访问网站经常会出现HTTP Error 403: Forbidden的情况对有些 header 要特别留意,Server 端会针对这些 header 做检查1.User-Agent 有些 Server 或 Proxy 会检查该值,用来判断是否是浏览器发起的 Request2.Content-Type 在使用 REST 接口时,Server 会检查该值,用来确定 HTTP Body 中的内容该怎样解析。

页面解析

对于页面解析最强大的当然是正则表达式。

其次就是解析库了,常用的有两个lxml和BeautifulSoup,对于这两个库,我的评价是,都是HTML/XML的处理库。

Beautifulsoup纯python实现,效率低,但是功能实用,比如能用通过结果搜索获得某个HTML节点的源码;lxmlC语言编码,高效,支持Xpath

验证码的处理

对于一些简单的验证码,可以进行简单的识别。本人也只进行过一些简单的验证码识别。但是有些反人类的验证码,比如12306,可以通过打码平台进行人工打码,当然这是要付费的。

gzip压缩

有没有遇到过某些网页,不论怎么转码都是一团乱码。那说明你还不知道许多web服务具有发送压缩数据的能力,这可以将网络线路上传输的大量数据消减 60% 以上。这尤其适用于 XML web 服务,因为 XML 数据 的压缩率可以很高。但是一般服务器不会为你发送压缩数据,除非你告诉服务器你可以处理压缩数据。

参考资料

  • Python网络爬虫实战出版社:清华大学出版社 作者:胡松涛
  • 精通Python爬虫框架Scrapy出版社:人民邮电出版社 作者:迪米特里奥斯
  • Python3爬虫、数据清洗与可视化实战出版社:电子工业出版社 作者:零一
  • 精通Python网络爬虫出版社:机械工业出版社 作者:韦玮
  • Python网络爬虫实战出版社:清华大学出版社 作者:胡松涛
  • Python网络爬虫从入门到实践出版社:机械工业出版社 作者:唐松/陈智铨
  • 用Python写网络爬虫出版社:人民邮电出版社 作者:理查德·劳森
  • 相关问题

  • PyV8在Python爬虫中执行js代码的方法04-13
  • python爬虫需要学哪些东西01-27
  • python爬虫好学吗02-17
  • python爬虫被封的问题分析06-13
  • python爬虫BeautifulSoup简单使用03-10
  • python爬虫数据解析之正则表达式01-28
  • 关于Python爬虫使用requests发送post请求的一些疑点02-27
  • python爬虫实现校园网自动重连脚本的方法02-10
  • 详解python爬虫 urllib模块发起post请求01-28
  • 利用Python爬虫爬取NBA数据功能实例分享03-07
  • Python爬虫采集遇到403问题怎么办02-16
  • Python爬虫解析方法和爬虫实现过程总结06-05
  • 分享python爬虫headers设置后无效的解决方案02-14
  • python爬虫定义01-22
  • 更多答案
    网友NO.593940

    07-25

    Python实用技巧之列表、字典、集合中根据条件筛选数据详解, 通用做法:迭代 以列表为例: 筛选出下列数字大于等于0的数 data = [2, 7, -4, -1, 3, 0, 8]res = []for i in data: if i = 0: res.append(i)print(res) 运行结果: [2, 7, 3, 0, 8] 奇淫巧技——列表筛选 使用filter函数 随机生成一组正负数皆有的数,筛选出大于等于0的数 flilter(function or None, iterable) from random import randintdata = [randint(-10,10) for _ in range(10)]# filter 接收两个参数,第一个参数为过滤条件,第二个参数为过滤范围f = filter(lambda x: x=0, data)for j in f: print(j) 使用列表解析(列表推导式) 随机生成一组正负数皆有的数,筛选出大于等于0的数 from random import randintdata = [randint(-10,10) for _ in range(10)]f = [i for i in data if i = 0]print(f) 使用tim……

    网友NO.886084

    06-03

    值得收藏,Python 开发中的高级技巧, Python 开发中有哪些高级技巧?这是知乎上一个问题,我总结了一些常见的技巧在这里,可能谈不上多高级,但掌握这些至少可以让你的代码看起来 Pythonic 一点。如果你还在按照类C语言的那套风格来写的话,在 code review 恐怕会要被吐槽了。 列表推导式 chars = [ c for c in 'python' ] chars['p', 'y', 't', 'h', 'o', 'n'] 字典推导式 dict1 = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5} double_dict1 = {k:v*2 for (k,v) in dict1.items()} double_dict1{'a': 2, 'b': 4, 'c': 6, 'd': 8, 'e': 10} 集合推导式 set1 = {1,2,3,4} double_set = {i*2 for i in set1} double_set{8, 2, 4, 6} 合并字典 x = {'a':1,'b':2} y = {'c':3, 'd':4} z = {**x, **y} z{'a': 1, 'b': 2, 'c': 3, 'd': 4} 复制列表 nums = [1,2,3] nums[::][1, 2,……

    网友NO.155510

    02-19

    分享Python中字典创建,遍历,添加等实用基础操作技巧合集, 字段是Python是字典中唯一的键-值类型,是Python中非常重要的数据结构,因其用哈希的方式存储数据,其复杂度为O(1),速度非常快。下面列出字典的常用的用途. 一、字典中常见方法列表 代码如下: D.clear() #移除D中的所有项 D.copy() #返回D的副本 D.fromkeys(seq[,val]) #返回从seq中获得的键和被设置为val的值的字典。可做类方法调用 D.get(key[,default]) #如果D[key]存在,将其返回;否则返回给定的默认值None D.has_key(key) #检查D是否有给定键key D.items() #返回表示D项的(键,值)对列表 D.iteritems() #从D.items()返回的(键,值)对中返回一个可迭代的对象 D.iterkeys() #从D的键中返回一个可迭代对象 D.itervalues() #从D的值中返回一个可迭……

    <
    1
    >

    Copyright 2018-2020 www.xz577.com 码农之家

    版权投诉 / 书籍推广 / 赞助:520161757@qq.com

    idea注册码