spider初识爬虫

先认识标签:

table表标签

tr行标签

td列标签

简单创建一个表:

ul:无序列表、数据无关来联、在爬虫领域中使用较多;ol:顺序列表,数据相关联,爬虫使用场景少。

演示如下:

 table里面可以设置的属性:width、height、border(边框) "xx px"

a标签:

超链接  href="域名"

点击超链接,页面会自动跳转到百度这个url(网址)

 

 什么叫爬虫?
1、爬虫一段程序,通过url域名爬取网页的信息

2、程序模拟浏览器获取有用的数据

核心:爬取网页所有的数据 解析获取有用的数据

爬虫难点?

爬与反爬之间的博弈  就像是追女朋友 <你要满足她的种种要求、然后一网打尽获取想要的数据>

爬虫能干什么???
数据分析:数据收集起来分析规律,这些数据是怎们样的;

人工抓取数据:获得想要的数据;

舆情分析:分析;

社交软件的冷启动:例如陌陌爬取微博上面的用户数据,让你聊天,假人引流;

竞争对手的监督:像国内的两大电商阿里和京东,互相爬取数据,分析,修改上价格,提高销售量

再例如:12306抢票台 其他软件也能实现抢票功能 就是因为怕取了12306的数据;

政府部门的天气数据等等.......

爬虫类型:
通用爬虫,意义不大;

聚焦爬虫,我们主要学习这个类型的爬虫技术。

常见的反爬手段:

UA;

代理ip;

验证码验证;

动态加载网页(返回假的数据);

数据加密(字体加密...)

爬取数据之get请求方式:

'''
使用urllib.request库爬取数据
请求对象定制、模拟浏览器访问服务器获取需求、读取解码数据...
url 路径
respose=urllib.request.urlopen() 返回需求
content=respose.read().decode("utf-8")获取数据
注意:
response的数据类型是“HTTPResponse”
字节->字符串  read()读取的是字节(B),需要解码显示字符串,才可以看到中文
字符串->字节 编码 encode()
read() 字节形式读取二进制 拓展 read(5)只读五个字节的数据并且返回
readlind() 只读一行数据
readlines()读取所有数据 每一行作为索引返回成为一个列表。
getcode() 获取当前状态码 正确为200 错误 如 404...
geturl() 获取当前访问网页路径(域名[主机])
getheaders() 获取用户信息(cpu型号 浏览器版本、信息这些)
'''
总结:
一个类型:response类型为 HTTPResponse
六个方法:read() readline() readlines() getcode() geturl() getheaders()
注意:
read方法:
返回的是二进制数据,我们要将二进制的数据转换成字符串需要解码decode()  字符串->字节 需要编码encode()
'''

使用urllib.request.urlretrieve()下载网页、图片、视频:

# 下载视频 mp4
# import urllib.request
# url_vedio="https://vd3.bdstatic.com/mda-na93kr391yq0zeq9/cae_h264/1641782208996425563/mda-na93kr391yq0zeq9.mp4?v_from_s=hkapp-haokan-suzhou&auth_key=1641812993-0-0-05416df08744469cd594da52838260a4&bcevod_channel=searchbox_feed&pd=1&pt=3&logid=2393887674&vid=8494476860693044414&abtest=100254_2&klogid=2393887674"
# urllib.request.urlretrieve(url_vedio,'news.mp4')
补充知识:
url="https://www.baidu.com"
http/https(更加安全)协议
www.baidu.com主机 
端口号:http(80)/https(443)
路径:s
wd:参数 
#:锚点
request对象:url+data+headers
传参:位置传参、关键字传参、......
'''

'''
get请求:
编解码 urllib.parse  quote/unicode 
转换编码(unicode全球编码):urllib.parse.quoto()真对单个字符/encode()针对多个字符--data({:},:)
base_url+data  转换层可以用的url   url=base_url+data
'''
# https://www.baidu.com/baidu?tn=monline_3_dg&ie=utf-8&wd=%E9%99%88%E5%A5%95%E8%BF%85 可以使用的
# import urllib.request
# headers={
#
# 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0'
# }
# url="https://www.baidu.com/baidu?tn=monline_3_dg&ie=utf-8&wd=%E9%99%88%E5%A5%95%E8%BF%85"
# request=urllib.request.Request(url=url,headers=headers)
# response=urllib.request.urlopen(request)
# content=response.read().decode('utf-8')
# print(content)
# base_url="https://www.baidu.com/baidu?tn=monline_3_dg&ie=utf-8&wd=" 少了一个陈奕迅需要unicode编码
# 需要将 陈奕迅 改成unicode编码格式 单个依赖于parse.quote()
# 实现
# import urllib.request
# import urllib.parse
# base_url="https://www.baidu.com/baidu?tn=monline_3_dg&ie=utf-8&wd="
# name=urllib.parse.quote("陈奕迅")
# new_url=base_url+name
# headers={
# 'User-Agent':
#  'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0'
# }
# request=urllib.request.Request(url=new_url,headers=headers)
# response=urllib.request.urlopen(request)
# content=response.read().decode("utf-8")
# print(content)
# 简单来说就是转换成unicode编码 1/请求对象定制(UA/https) 2/模拟获得响应 3/读取解码数据

# tn=monline_3_dg&ie=utf-8&wd=陈奕迅   针对多个需要编码转换 parse.urlencode()针对多个参数编解码
import urllib.request
import urllib.parse
base_url="https://www.baidu.com/baidu?"
data={
'tn':'monline_3_dg',
   'ie':'utf-8',
      'wd':'陈奕迅'
}
url=urllib.parse.urlencode(data)
new_url=base_url+url
headers={
'User-Agent':
   'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0'
}
# 请求资源路径
request=urllib.request.Request(url=new_url,headers=headers)
response=urllib.request.urlopen(request)
content=response.read().decode('utf8')
print(content)
# request->response->content 爬虫第一步大致流程 第二步解析数据,找到需要的数据

SUMMERY:

简单来说get请求方式就三步:

urllib.request/urllib.parse
1、
请求对象定制 url、headers; 

2.模拟浏览器访问服务器获得响应;

3、读响应数据并且解码,获得数据;

  request->response->content

具体步骤:

  1. (url+headers)合法 request=url.request.Request(url=url,headers=headers)
  2. response=urllib.request.urlopen(request)
  3. content=response.read().decode("utf-8")

网络爬虫程序   什么是网络爬虫(Spider)程序   Spider又叫WebCrawler或者Robot,是一个沿着链接漫游Web 文档集合的程序。它一般驻留在服务器上,通过给定的一些URL,利用HTTP等标准协议读取相应文档,然后以文档中包括的所有未访问过的URL作为新的起点,继续进行漫游,直到没有满足条件的新URL为止。WebCrawler的主要功能是自动从Internet上的各Web 站点抓取Web文档并从该Web文档中提取一些信息来描述该Web文档,为搜索引擎站点的数据库服务器追加和更新数据提供原始数据,这些数据包括标题、长度、文件建立时间、HTML文件中的各种链接数目等   1. 搜索策略   ① IP 地址搜索策略   先赋予爬虫一个起始的IP地址,然后根据IP地址递增的方式搜索本IP地址段后的每一个WWW 地址中的文档,它完全不考虑各文档中指向其它Web 站点的超级链接地址。优点是搜索全面,能够发现那些没被其它文档引用的新文档的信息源;缺点是不适合大规模搜索。   ② 深度优先搜索策略   深度优先搜索是一种在开发爬虫早期使用较多的方法。它的目的是要达到被搜索结构的叶结点(即那些不包含任何超链的HTML文件) 。在一个HTML文件中,当一个超链被选择后,被链接的HTML文件将执行深度优先搜索,即在搜索其余的超链结果之前必须先完整地搜索单独的一条链。深度优先搜索沿着HTML文件上的超链走到不能再深入为止,然后返回到某一个HTML文件,再继续选择该HTML文件中的其他超链。当不再有其他超链可选择时,说明搜索已经结束。优点是能遍历一个Web 站点或深层嵌套的文档集合;缺点是因为Web结构相当深,,有可能造成一旦进去,再也出不来的情况发生。   ③ 宽度优先搜索策略   在宽度优先搜索中,先搜索完一个Web 页面中所有的超级链接,然后再继续搜索下一层, 直到底层为止。例如,一个HTML 文件中有三个超链,选择其中之一并处理相应的HTML文件,然后不再选择第二个HTML文件中的任何超链, 而是返回并选择第二个超链,处理相应的HTML文件,再返回,选择第三个超链并处理相应的HTML文件。一旦一层上的所有超链都己被选择过,就可以开始在刚才处理过的HIML 文件中搜索其余的超链。这就保证了对浅层的首先处理。当遇到一个无穷尽的深层分支时,不会导致陷进WWW 中的深层文档中出现出不来的情况发生。宽度优先搜索策略还有一个优点,即它能在两个HTML文件之间找到最短路径。宽度优先搜索策略通常是实现爬虫的最佳策略,因为它容易实现,而且具备大多数期望的功能。但是如果要遍历一个指定的站点或者深层嵌套的HTML文件集,用宽度优先搜索策略则需要花费比较长的时间才能到达深层的HTML文件。综合考虑以上几种策略和国内信息导航系统搜索信息的特点,国内一般采用以宽度优先搜索策略为主、线性搜索策略为辅的搜索策略。对于某些不被引用的或很少被引用的HTML文件,宽度优先搜索策略可能会遗漏这些孤立的信息源,可以用线性搜索策略作为它的补充。   ④ 专业搜索引擎爬虫策略   目前,专业搜索引擎网络爬虫通常采用“最好优先”原则访问WEB,即为快速、有效地获得更多的与主题相关的页面(简称“回报”),每次选择“最有价值”的链接进行访问。由于链接包含于页面之中,而通常具有较高价值的页面包含的链接也具有较高的价值,因而对链接价值的评价有时也转换为对页面价值的评价。   ⑤ 爬虫的设计中应该注意的问题   第一个问题是URL地址的标准化:在WWW上,一个URL地址可以有多种表示方法,可以用IP 地址表示,也可以用域名来表示。为了避免爬虫重复访问同一地址。第二个问题是避免掉进网络陷阱:网络上的链接情况比较复杂,一些静态的网页可能构成闭环回路。为了避免爬虫在一条循环路线上反复抓取,在把URL加入待搜索地址列表之前都要检查是否已在待搜索的地址列表中出现过。对于动态网页,爬虫应该忽略所有带参数的URL。第三个问题:对于拒绝访问的页面,爬虫应该遵从“漫游拒绝访问规则”。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值