走近Python爬虫(上):爬虫的作用和技术、获取网页内容、解析网页内容

文章目录

  • 一、绪论
    • 爬虫的作用
    • 爬虫的技术
  • 二、获取网页—requests模块
    • 1.requests模块简单使用
    • 2.使用多线程
  • 三、解析网页
    • 1.XPath
  • 参考

本文是Python爬虫系列博客的第一篇,内容概览如下:

走近Python爬虫(上):爬虫的作用和技术、获取网页内容、解析网页内容_第1张图片

一、绪论

爬虫的作用

  • 收集数据:

爬虫可用于收集数据,是最常用的使用方法。由于爬虫是程序,运行速度快且不会疲劳,因此使用爬虫获取大量数据变得简单快捷。现在绝大多数网站都基于模板开发,使用模板可快速生成相同版式、不同内容的页面。因此,只需针对一个页面开发爬虫,即可爬取基于同一模板生成的不同页面。这种爬虫称为定向爬虫,也是本博客所讲述的爬虫类型。

  • 尽职调查:

尽职调查是投资人在投资前了解公司是否尽职尽责、是否存在欺诈行为的过程。以往,尽职调查通常通过调查客户或审计财务报表来完成。然而,使用爬虫后,尽职调查变得更加便捷。例如,对于一个电商公司的调查,想要了解其商品销售情况。该公司声称每月销售额数亿元。通过使用爬虫获取该公司网站所有商品的销量情况,可以计算出实际总销售额。此外,还可以爬取所有评论并进行分析,以发现是否存在刷单行为。

  • 刷流量和秒杀:

刷流量是爬虫的天然功能。当爬虫访问网站时,如果成功隐藏身份,网站无法辨别其为爬虫,将视为正常访问。因此,爬虫会无意中增加网站的访问量。除了刷流量,爬虫还可参与各种秒杀活动,如在电商网站上抢购商品、优惠券、机票和火车票等。目前,许多人专门利用爬虫参与活动并从中获利,这被称为"薅羊毛",而从事此类行为的人被称为"羊毛党"。然而,使用爬虫进行盈利的行为实际上处于法律的灰色地带。

爬虫的技术

  • 爬虫实现的关键是:

遇到各种反爬虫问题时,应该如何突破,如何隐藏爬虫,如何模拟人的行为,以及遇到没有见过的反爬虫策略时,应该如何思考及如何使用爬虫爬取非网页内容等。

  • 爬虫的主要目的是:

获取网页内容并解析。只要能达到这个目的,用什么方法都没有问题。关于获取网页,常用的是Python的两个第三方模块,一个是requests,另一个是爬虫框架Scrapy。关于解析网页内容,常见的3种方式——正则表达式、XPath和BeautifulSoup。两种网页获取方式和3种网页解析方式可以自由搭配,随意使用。

  • 反爬虫措施:

由于网站必然不会这么轻易地让人把数据全给拿走,因此很多网站都会采取各种反爬虫措施。常规的反爬虫措施包括但不限于访问频率检查、验证码、登录验证、行为检测。

二、获取网页—requests模块

requests是Python的一个第三方HTTP(Hypertext Transfer Protocol,超文本传输协议)库,它比Python自带的网络库urllib更加简单、方便和人性化。使用requests可以让Python实现访问网页并获取源代码的功能。

首先,命令行安装requests模块:

pip install request

1.requests模块简单使用

  • get方法:
    import requests
    html_str = requests.get(’网址’).content.decode(‘编码方式’) # 编码方式默认是UTF-8
  • post方法,解析成字符串:

data对象表示查询参数:

    import requests
    data = {'key1': 'value1',
          'key2': 'value2'}
    html_formdata = requests.post(’网址’, data=data).content.decode()
    #用formdata提交数据
  • post方法,解析成json:
    html_json = requests.post(’网址’, json=data).content.decode() #使用JSON提交数据

2.使用多线程

单线程爬虫每次只访问一个页面,不能充分利用计算机的网络带宽。一个页面最多也就几百KB,所以爬虫在爬取一个页面的时候,多出来的网速和从发起请求到得到源代码中间的时间都被浪费了。所以,要使用多线程。

  • 代码示例:
    from multiprocessing.dummy import Pool
    def calc_power2(num):
        return num * num
    pool = Pool(3)
    origin_num = [x for x in range(10)]
    result = pool.map(calc_power2, origin_num)
    print(f’计算0-9的平方分别为:{result}')

三、解析网页

  • 三种方式:
    正则表达式:复杂,效果还不好,可能找不到。
    XPath:能利用HTML的结构性特点,使用更友好。
    Beautiful Soup4(BS4):它是Python的一个第三方库,某些方面比XPath易懂,但是不如XPath简洁,而且速度比XPath慢。

1.XPath

需要先安装lxml,不同操作系统安装方式不同,请自行百度。

  • 代码使用:
    import lxml html
    selector = lxml.fromstring(’网页源代码’)
    info = selector.xpath(’一段XPath语句’)
  • XPath语法:

查找技巧:从内向外一直找到一个有独特的属性值的元素为止,不是非要找到顶层。
Chrome浏览器可以在页面源码上定位到元素后,右键“Copy”→“Copy XPath”。

    //div[@class="useful"]/ul/li/text()

参考

《Python爬虫开发:从入门到实战(微课版)》谢乾坤

你可能感兴趣的:(Python,python,爬虫,开发语言)