用 Python 抓网页?你想问的都帮答好了,你还有不懂的吗?

近年来,随着大数据、人工智能、机器学习等技术的兴起,Python语言也越来越为人们所喜爱。但早在这些技术普及之前,Python就一直担负着一个重要的工作:自动化抓取网页内容。

举个栗子,飞机票的价格每时每刻都在变化,甚至有些app,你搜索的越多,价格就越贵。那不搜又不行啊,怎么样才能知道确切的价格呢?

对于一般用户,我们主要关注的就是网页抓取。因此,以下提到的“爬虫”一律指网页抓取所用的自动化程序。在今天的文章里,我们将带你从最基础的工具和库入手,详细了解一下一个爬虫程序的常用结构,爬取网络数据时应该遵循哪些规则,存在哪些陷阱;最后,我们还将解答一些常见的问题,比如反追踪,该做什么不该做什么,以及如何采用并行处理技术加速你的爬虫等等。

在页面上,这个被选中的元素包含了作者的姓名、标签及个人介绍。这个元素的class是herohero--profileu-flexTOP。然后在这个元素里还有几个子元素,其中显示作者姓名的是标签,它的class是ui-h2hero-title,显示作者个人信息的,它的class是ui-bodyhero-description。

于是,我们从最基本的代码开始:先导入需要用的BeautifulSoup和Requests库,然后发起查询请求(requests.get()),接着处理html源码,最后找到所有class为main_price的元素。

有的时候,网页的其他地方可能也有main_price的元素。为了避免导出无关的信息,我们可以先找到我们需要的id='listings_prices',然后只在这个元素的子元素中查找main_price元素。

不过,因为有一些class可能并不总是出现(例如前面例子中的discounted_price),相关的元素并不一定在每个列表中都有。所以你需要统计某个元素在所有列表中出现的比例,比如计算返回None的次数。如果每次都返回None,那也许你需要检查代码或者是HTML源码,看看是不是这个元素在网站的HTML中就已经改变了。

3.4给request请求设置一个超时时间在默认状态,request库会无止境地等待某个请求返回对应的响应内容。所以,给它设置一个参数,等待超时就断开连接,还是很有必要的。文字版见:https://gist.github.com/jkokatjuhha/64cecefa0bf31c2b21111373c11fcc663.5我是不是刚被屏蔽了?

文字版见:https://gist.github.com/jkokatjuhha/a33467fae4c9f7fac64f067501b484ac3.6切换IP地址就算你采用了随机生成的useragent,程序发起的所有连接都还用的是同一个IP地址:你的地址。虽然这通常并不会引起太多重视,毕竟很多图书馆、大学以及企业分别都只有少数几个IP地址,由这些机构内的所有计算机共同使用。

最后,祝大家爬得开心顺利!记得多关注我哦!!最后的文末知识点摘要:Python解惑之:整数比较在Python中一切都是对象,毫无例外整数也是对象,对象之间比较是否相等可以用==,也可以用is。==和is操作的区别是:is比较的是两个对象的id值是否相等,也就是比较俩对象是否为同一个实例对象,是否指向同一个内存地址。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181007A02ULV00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券