抓取网页数据(云服务薅羊毛的正确姿势,你get到了吗?)

优采云 发布时间: 2021-09-23 03:12

  抓取网页数据(云服务薅羊毛的正确姿势,你get到了吗?)

  完成阅读需要15分钟,快速阅读只需要5分钟

  无论是科学研究还是商业运营,我们经常通过数据支持决策。作为个人用户,在缺乏企业数据平台支持的情况下,网络爬虫技术可能会为我们打开一扇窗口

  1.条件准备

  基本前提是要有一台配置了Python3编程环境的计算机或服务器。这个条件很简单。您可以直接选择安装Anaconda[1]。有关如何在本地配置环境或远程部署环境,请参阅我以前的文章“jupyterlab帮助提高学习效率”

  由于爬虫程序脚本通常需要重复运行,因此您可能需要部署一台服务器来日夜为您工作。我还帮助您提前完成了“关于云服务的正确姿态”的家庭作业

  如果只是为了学习,我还准备了谷歌的协作案例环境[2](需要科学互联网接入),以便您更好地理解文章内容

  2.概念梳理

  爬行动物技术非常简单。它可以分为两个步骤

  Step1 通过给定的网络地址下载网页数据

Step2 提供数据的规则让计算机筛选数据

  2.1网络数据下载

  第一步可以说非常简单。python第三方生态系统中出现了非常简单的工具来实现它,比如请求。稍后我们将演示如何使用它

  但是,如果您足够小心,您会发现一些网站需要在显示特定页面和数据之前登录。因此,网页数据的获取可以暂时分为简单下载和变相下载。后者要求我们使用浏览器将爬虫脚本伪装为正常访问

  2.2网页数据提取

  直接下载的网页数据是网页的源代码,供浏览器阅读,而不是供人们阅读。我们真正想要的数据隐藏在这一大串源代码中。为了获得我们想要的干净数据,我们需要指定一个规则,让计算机帮助我们从这些源代码中提取数据

  我建议在这里学习两种这样的规则。一种是通用正则表达式,另一种是用网页源代码语言编写的XPath

  正则表达式可能有点复杂。简而言之,它是总结目标数据的字符串规则。XPath听起来更复杂,但现在Chrome浏览器提供了一个可视化提取工具“XPath助手”[3]。你可以通过谷歌商店扩展来安装它。稍后我们将介绍如何使用XPath帮助器

  

  3.案例研究

  在开始之前,让我们检查一下是否通过打开juyterlab安装了本节中所需的一些第三方Python包

  !pip3 install requests

!pip3 install lxml

  注意:输入jupyterlab+终端指令可以直接在jupyterlab环境中执行。我们将把两个已安装的第三方库导入到当前环境中

  import requests

from lxml import etree

  3.1网络数据下载

  首先,让我们通过对知乎文章数据进行爬网来解释如何使用爬网程序。我们首先通过浏览器访问目标网站,并复制目标网站,如下所示

  url = 'https://www.zhihu.com/people/noidea-77/posts'

  根据前面的步骤,我们需要做的第一步是下载此网页的数据。这里我们使用强大的第三方库请求

  res = requests.get(url)

print(res.text)

  直接下载数据。我们发现,我们将收到400个错误请求的网页数据回复。此时,我们需要将python脚本伪造为浏览器访问网站. 如图所示,我们右键单击以在Chrome浏览器中进行检查,单击developer工具中的Network和random列,我们可以在右侧看到以下信息

  

  复制cookie和用户代理数据以构造以下标头字典数据:

  headers = {

'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36',

'cookie':'_zap=7710374e-0d0b-4285-a69d-a2352eb102b5; d_c0="ALBiqotP2w-PTofuUtLo0XQZKjwcT8zji0U=|1565195731"; q_c1=3f807f2ca0c84d51a6a418258d275430|1578543800000|1566266234000; tst=r; UM_distinctid=16fea4b3816d5-0fff1be09d9b96-39677b0e-13c680-16fea4b38177a1; _xsrf=6182b2eb-6f32-454e-8c0d-d16122a8bec3; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1580782502,1580790283,1580790307,1580790327; r_cap_id="2|1:0|10:1580790382|8:r_cap_id|44:ZjQ3ZWFhODFlODc0NDRjNDg5YzZlODg1MDRiZmUzZjk=|eed022a309955b6db3b378b610e352c46c4024477bd99bf11a4fb25475e0d196"; capsion_ticket="2|1:0|10:1580790628|14:capsion_ticket|44:MmVlZGE0YjNjYWMzNDM0OGFlOWNkZmNhMWQ3ZWJlZDA=|07f358d43a89bcad3b55c305fdf7f6be2a3f67c47f1b2fa1d54acd2e0b4eacc3"; z_c0="2|1:0|10:1580790648|4:z_c0|92:Mi4xSVNlOEJBQUFBQUFBc0dLcWkwX2JEeVlBQUFCZ0FsVk5lRUVtWHdEUXBDMldpZkZMMEpxXzZ3UGJIMklibFRIZnB3|a5c9f10bc3b9f96930b8ba28295a0f1fdda1509aeb81564440978a640c36f42d"; Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49=1580795302; CNZZDATA1272960301=815094974-1580178850-https%253A%252F%252Farticle.xmt.cn%252F%7C1580791820; KLBRSID=2177cbf908056c6654e972f5ddc96dc2|1580795993|1580790152'

}

  cookie收录临时登录信息,用户代理将Python脚本伪装成浏览器

  现在,将标题字典数据添加到脚本中,您将发现已成功下载数据

  res = requests.get(url,headers=headers)

print(res.text)

  3.2网页数据提取

  数据提取还需要chrome开发者工具。右键点击目标数据,点击【检查】,出现下图。通过将数据对象的XPath复制到XPath助手中,我们可以看到XPath助手可以帮助我们直接提取数据

  

  现在XPath助手中的XPath是当前目标数据的源代码规则。如果需要获取相同类型的数据,只需观察XPath,删除与列表相似的数据,通过观察判断是否正确。通过尝试,我们获得了文章title的数据。采集规则如下(在末尾添加/text()以获取文本数据):

  title_pattern = '//*[@id="Profile-posts"]/div[2]/div/div/h2/a/text()'

  Python中XPath的标准模板如下所示,其中res.text是我们下载的网页数据,title_uu模式是我们通过XPath助手获得的数据提取规则。现在我们可以获得我的文章列表中所有文章的标题数据

  html=etree.HTML(res.text)

result = html.xpath(title_pattern)

print(result)

  总结

  举一反三。现在您不仅可以抓取文章title,还可以抓取文章release date和文章profile。如果当前任务是抓取电影网站数据,您能否以相同的方式快速抓取电影标题和电影收视率

  如果您想继续深化web爬虫技术,可以深入了解正则表达式和XPath规则,也可以进一步联系分布式爬虫框架scripy。此外,移动端的数据捕获工具Charles、桌面端的自动化工具pywinauto等都值得理解

  参考资料

  [1] Anaconda官方网站下载/分发/

  [2] 协作案例环境:/drive/1Nuvpouysoxpuaxqogggvfqaptjqnl2 DC

  [3] XPath助手:/webstore/detail/hgimnogjllphhkhhlmebbmlgjoejdpjl

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线