php抓取网页匹配url( 爬虫模拟人对网页的操作方法)

优采云 发布时间: 2022-01-13 12:03

  php抓取网页匹配url(

爬虫模拟人对网页的操作方法)

  使用Python爬取百度热搜信息

  目录摘要

  前言

  什么是爬虫,其实就是用电脑模拟人在网页上的操作

  例如,模拟人类浏览和购物网站

  使用爬虫前一定要看清楚目标 网站 可罚但不可罚:-)

  可以在目标网站中添加/robots.txt,查看网页的具体信息

  比如查看天猫的输入

  

  User-agent 代表发送请求的对象

  星号 * 代表任何搜索引擎

  Disallow 表示不允许访问的部分

  / 表示从根开始

  Allow 表示允许访问的部分

  在这个例子中,我爬取了百度热搜前30条新闻(我本来打算在英雄联盟首页数据中心爬取前50名英雄的英雄信息,但是无法实现延迟爬取网页的操作,但我只能爬百度热搜),它的一般信息放在Excel表格和Flask网页中,实现数据可视化。对数据可视化感兴趣的同学也可以爬取其他内容

  由于我的水平有限,这个文章里面的爬虫都是比较基础的东西

  库函数准备

  如何安装 Python 库:

  打开 cmd 命令提示符并输入 pip install XXX (这是你要安装的库的名称)

  这些库的具体使用可以看我接下来的操作

  只需要掌握几个常用功能

  BS4

  即美丽汤

  用于解析 HTML 页面并提取指定数据。

  后面我的demo里会看到详细的用法。

  回覆

  用于匹配字符串中的响应字符串的正则表达式。

  关于正则表达式,可以去菜鸟教程详细介绍

  urllib

  它是 Python 自带的 HTTP 请求库,可以操作一系列 URL。

  xlwt/xlrt

  用于写入(写入)/读取(读取)Excel 表格中的数据。

  烧瓶

  该库用于制作一个简单的 Web 框架,即 网站 用于数据可视化。

  其实我对数据可视化的把握也很浅薄,只是简单的将数据导入到网页中。

  神社2

  这个库的目的是实现在 HTML 页面的字符中插入参数的功能。

  后端:

name="HQ"

前端:

<p>{{name}}长得真帅!

显示:

HQ长得真帅!</p>

  标记安全

  与 Jinja 一起使用以在渲染页面时避免不受信任的输入,防止注入攻击(尽管没有人会攻击你....)

  数据抓取

  数据爬取和数据可视化的两个py文件是分开的

  数据爬取需要导入re bs4 url​​lib xlwt的四个库文件

  网页抓取

  使用下面的方法调用一个函数,让函数调用关系更清晰

  if __name__=="__main__": #当程序执行时 调用一下函数

main()

  def askurl(url):

head={

"User-Agent":"""Mozilla/5.0 (Windows NT 10.0; Win64; x64)

AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.55"""

}

#用户代理 告诉服务器我只是一个普普通通的浏览器

requset=urllib.request.Request(url)

#发送请求

response=urllib.request.urlopen(requset)

#响应的为一个request对象

#通过read()转化为 bytes类型字符串

#再通过decode()转化为 str类型的字符串

#接受响应

html=response.read().decode("utf-8")

将抓取到的网页存入文档中 方便观察

path=r"C:UsersXXXDesktopPython ext.txt"

#这里在字符串前加入r 防止字符串中的发生转义

f=open(r"path","w",encoding="utf-8")

f.write(html)

f.close()

#这样在txt文件中就可以查看网页的源码

return html

  headers的值可以在网页中按F12

  然后点击network change,下拉到底部任意request header,就是user-agent代理信息

  

  值得注意的是,如果请求中没有设置headers,服务器会返回418状态码

  表示服务器认出你是爬虫,说:“我是茶壶”

  表示服务器拒绝煮咖啡,因为它总是一个茶壶(这是一个表情包)

  数据分析

  把抓到的txt文件后缀改成html作为本地网页打开

  如果因为行太长导致vscode报错,可以参考以下博客

  打开后的页面如图

  

  使用该功能查看需要爬取信息的地方

  在这个项目中,我们抓取目标信息的标题内容和链接

  

  我们可以发现,我们需要的所有信息都在其类为以下类型的表中

  

  所以我们使用 Beautifulsoup 来解析网页

  def getData(html):

datalist=[]

soup=BeautifulSoup(html,"html.parser") #定义一个解析对象

#soup.find_all(a,b) 其中a为标签的类型 class_ 对div的class进行匹配

#返回的是所有class为category-wrap_iQLoo horizontal_1eKyQ的列表

for item in soup.find_all("div",class_="category-wrap_iQLoo horizontal_1eKyQ"):

item=str(item)

#将列表中每一个子标签转换为字符串用于re匹配

  接下来,重新匹配每个项目

  首先使用pile()创建匹配规则,然后使用findall进行匹配

  通过查看HTML文件中目标信息前后的特殊字符创建匹配规则

  而 (.*?) 是要与 * 匹配的字符串,后跟 ? 代表非贪心匹配

  例如

  

  标题前后的信息为省略号"&gt;和

  其他都一样

<p>#匹配规则

#链接

findlink=re.compile(r" href="(.*?)" rel="external nofollow" target="_blank")

#标题

findtitle=re.compile(r"ellipsis"> (.*?) (.*?)

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线