文章目录
- 一、绪论
- 爬虫的作用
- 爬虫的技术
- 二、获取网页—requests模块
- 1.requests模块简单使用
- 2.使用多线程
- 三、解析网页
- 1.XPath
- 参考
本文是Python爬虫系列博客的第一篇,内容概览如下:
一、绪论
爬虫的作用
- 收集数据:
爬虫可用于收集数据,是最常用的使用方法。由于爬虫是程序,运行速度快且不会疲劳,因此使用爬虫获取大量数据变得简单快捷。现在绝大多数网站都基于模板开发,使用模板可快速生成相同版式、不同内容的页面。因此,只需针对一个页面开发爬虫,即可爬取基于同一模板生成的不同页面。这种爬虫称为定向爬虫,也是本博客所讲述的爬虫类型。
- 尽职调查:
尽职调查是投资人在投资前了解公司是否尽职尽责、是否存在欺诈行为的过程。以往,尽职调查通常通过调查客户或审计财务报表来完成。然而,使用爬虫后,尽职调查变得更加便捷。例如,对于一个电商公司的调查,想要了解其商品销售情况。该公司声称每月销售额数亿元。通过使用爬虫获取该公司网站所有商品的销量情况,可以计算出实际总销售额。此外,还可以爬取所有评论并进行分析,以发现是否存在刷单行为。
- 刷流量和秒杀:
刷流量是爬虫的天然功能。当爬虫访问网站时,如果成功隐藏身份,网站无法辨别其为爬虫,将视为正常访问。因此,爬虫会无意中增加网站的访问量。除了刷流量,爬虫还可参与各种秒杀活动,如在电商网站上抢购商品、优惠券、机票和火车票等。目前,许多人专门利用爬虫参与活动并从中获利,这被称为"薅羊毛",而从事此类行为的人被称为"羊毛党"。然而,使用爬虫进行盈利的行为实际上处于法律的灰色地带。
爬虫的技术
- 爬虫实现的关键是:
遇到各种反爬虫问题时,应该如何突破,如何隐藏爬虫,如何模拟人的行为,以及遇到没有见过的反爬虫策略时,应该如何思考及如何使用爬虫爬取非网页内容等。
- 爬虫的主要目的是:
获取网页内容并解析。只要能达到这个目的,用什么方法都没有问题。关于获取网页,常用的是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爬虫开发:从入门到实战(微课版)》谢乾坤