爬虫基础入门(一)——爬虫基础

学习网络爬虫不仅需要python基础,还需要对网络、HTTP、网页、爬虫原理等有一个全方位的认识。然鹅很多大佬的文章都是直接讲库和代码,对于非计算机专业、网页零基础的本菜鸟来说,真的是一头雾水。所以还是乖乖刨了本书来补些基础,这篇文章就作为自己的入门笔记啦。边学边粗糙记录一下。

1 爬虫基础

目录

1 爬虫基础

1.1 HTTP基本原理

1.1.1 URI和URL

1.1.2 超文本

1.1.3 HTTP和HTTPS

1.1.4 HTTP请求过程

1.1.5 请求

1.1.6响应

1.2 网页基础

1.2.1 网页的组成

1.2.2 网页的结构

1.2.3 节点树及节点间的关系 

(14条消息) DOM节点关系及基本操作_dckong的博客-CSDN博客

 1.2.4 选择器

 1.3爬虫的基本原理

1.3.1什么是爬虫

 1.3.2能抓取什么样的数据

1.4会话和Cookies

1.5代理的基本原理


1.1 HTTP基本原理

参考:(14条消息) HTTP基本原理(简介)_Robin Hu的专栏-CSDN博客_http原理

在了解HTTP之前,科普一些名词:

1.1.1 URI和URL

URL是统一资源定位器,用于标识资源;URI(统一资源标识符)提供了更简单和可扩展的标识资源的方法。

(14条消息) URI和URL的区别比较与理解_小猛同学的博客-CSDN博客_uri

1.1.2 超文本

浏览器中的网页是由超文本(Hypertext)解析而成,网页源代码是一系列HTML代码,这些源代码HTML就被称为超文本。

1.1.3 HTTP和HTTPS

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议,它能保证高效而准确地传送超文本文档。

HTTPS(超文本安全传输协议),是在普通的HTTP下加入TLS(传输层安全协议),是HTTP的安全版。

1.1.4 HTTP请求过程

在浏览器输入URL,回车; 打开浏览器开发者模式下的Network监听组件(Ctrl+Shift+I,打开开发者选项,单击“Network”),可以看到Request和Response的信息。呕吼,没接触过网页的人感觉进入了新世界。里面Response Headers 和 Request Headers分别代表响应头和请求头,信息太多,看不懂呢,总之浏览器接收Response之后会解析里面的内容,生成网页内容。

1.1.5 请求

一个Request可划分为4部分:Request Method、Request URL(请求URL地址)、Request 

Headers、Request Body 

  • Request Method:常见的有2种;GET和POST

GET:在浏览器中直接输入RUL,回车,就发起了一个GET请求

POST:大多为表单提交发起的请求,其数据常以表单形式传输,不会体现在URL中,也较为安全。

其中,在爬虫时要加上UA,可以伪装成浏览器。

  • Request Body:一般承载的是POST请求中的表单数据,如果是GET请求则为空。

1.1.6响应

(14条消息) HTTP响应_liuurick的博客-CSDN博客_http响应

 Response Body非常重要,是响应的正文数据,如请求一个网页,它的响应是网页的HTML代码;请求一张图片,则是图片的二进制数据。也是爬虫执行时主要解析的内容。

 HTTP协议(HyperText Transfer Protocol,超文本传输协议)

TCP : Transmission Control Protocol 传输控制协议和IP: Internet Protocol  网际协议。

HTML(Hyper Text Markup Language,即超文本标记语言)

1.2 网页基础

网站由若干网页组成,网页是构成整个网络的基石。

1.2.1 网页的组成

框架、文本、超链接、表单、

图片(一般为JPG和GIF格式,即后缀为.jpg和.gif的文件)

(英文输入法怎么又变成了这个样子,额这怎么调?~_~)

表格(网页排版的灵魂,HTML语言的一种元素)、

动画、其他(广告、字幕、音视频等)

 (这个动画,看起来很好玩,又心动了~~)

1.2.2 网页的结构

(14条消息) HTML文档的基本结构_ks795820的博客-CSDN博客_html文档的基本结构

CTRL+U查看网页源代码

挠头表情包 [蘑菇头挠头 排队挠头 根本停不下来]

1.2.3 节点树及节点间的关系 

(14条消息) DOM节点关系及基本操作_dckong的博客-CSDN博客

1、DOM节点树

文档对象模型(Document Object Model)是javascript操作网页的接口。

DOM节点树体现了文档的层次结构,有DOM文档节点树(包含文档中所有类型的节点)和DOM元素节点树(只包含元素节点)两种类型。

preview

DOM提供的一些方法和属性可以实现遍历文档节点树.

首先来遍历所有Node节点。遍历DOM文档节点树的方法兼容所有浏览器。

  •  parentnode:获取父节

  •  chidnodes:获取所有子节点(包含元素节点和文本节点) firstchild:获取第一个子节点

  •  lastchild:获取最后一个子节点 
  • nextsibling:获取元素之后紧跟的节点 previoussibling:获取元素之前紧跟的节点


说明:可以使用 Javascript配合以上方法来获取相应的节点。

以下属性在遍历元素节点树时会使用到。只遍历元素节点,其余类型的节点忽略。除了 children方法外,其余方法在E8及以下版本的浏览器中都不兼容

parentelement:获取父元素 

children:获取所有子元素
childelementcount:获取子元素的数量

firstelementchild:获取第一个子元素。

lastelementchild:获取最后一个子元素 

nextelementsibling:获取元素后紧跟的元素 o

previouselementsibling:获取元素前紧跟的元素
 

下面演示如何使用演绎法获取一个元素的所有子结点 

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<title>获取元素子节点</title>
</head>
<body>
<ul>
<li>子元素1</li>
<li>子元素2</li>
<li>子元素3</li>
<li>子元素4</li>
</ul>
<script language="javascript">
    <!-- 获取标签“ul”元素 -->
	obj=document.getElementsByTagName("ul")[0]
    <!-- 通过children属性返回元素的所有子元素节点,即所有的“li” -->
	lis=obj.children
	num=lis.length
	for(i=0;i<num;i++)
	{
	  l=list[i]
	  alert(l.innerText)
	 }
</script>
</body>
</html>

书上的代码,第一次写HTML,小兴奋

2、节点之间的关系

DOM将文档解析成一个由多层次节点组成的DOM结构,DOM节点包含12种类型,节点关系类似于家族关系,那节点数相当于家谱。

<html>
  <head>
    <title>DOM 教程</title>
  </head>
  <body>
    <h1>DOM 第一课</h1>
    <p>Hello world!</p>
  </body>
</html>

从上面的示例 HTML 代码中:

  • <html> 节点没有父节点;它是根节点
  • <head> 和 <body> 的父节点是 <html> 节点
  • 文本节点 "Hello world!" 的父节点是 <p> 节点

并且:

  • <html> 节点拥有两个子节点:<head> 和 <body>
  • <head> 节点拥有一个子节点:<title> 节点
  • <title> 节点也拥有一个子节点:文本节点 "DOM 教程"
  • <h1> 和 <p> 节点是同胞节点,同时也是 <body> 的子节点

并且:

  • <head> 元素是 <html> 元素的首个子节点
  • <body> 元素是 <html> 元素的最后一个子节点
  • <h1> 元素是 <body> 元素的首个子节点
  • <p> 元素是 <body> 元素的最后一个子节点

只要清楚每个节点的结构是这种:<标签>内容</标签>结构就好了。看到一个<>就是一个节点,而且都是成对出现的,看到</>就表示这个节点结束。

 

节点的属性

(1)parentNode,父级属性。

每个节点都有,指向当前节点在节点树中的父节点。

(2)parentElement

指向父元素节点,IE浏览器中,只有元素节点有该属性,其他浏览器每个节点都有

(3)children子级属性

返回一个只读的NodeList集合(第一层子节点)

获取节点的父节点 

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<title>获取元素父节点</title>
</head>
<body>
<div>
	<strong></strong>
	<span></span>
</div>
<script language="javascript">
    
	var strong = document.getElementsByTagName("strong")[0];
	console.log(strong.parentElement);
</script>
</body>
</html>

不知道为啥标题是乱码?? 

获取节点的子节点

<script language="javascript">
	var div = document.getElementsByTagName("div")[0];
	console.log(div.childNodes);
</script>

 节点的方法

1. hasChildNodes()

判断当前节点是否包含子节点

2.contains(node)

判断node是否为当前节点的后代节点

 1.2.4 选择器

(14条消息) DOM选择器_shi_1204的博客-CSDN博客

 1.3爬虫的基本原理

1.3.1什么是爬虫

爬虫就是一段程序,这段程序的功能是从网络上采集需要的数据。

一个爬虫的工作流程:

1.发起请求

2.获取响应内容

3.解析内容

4.保存数据

 爬虫也可以指完成这样一个流程的过程。

 1.3.2能抓取什么样的数据

广义上只要能请求并且能获取响应的数据都能被抓取,具体包括:

(1)网页文本,如HTML文档、JSON、XML格式文本

(2)图片,JPEG、PNG等文件

(3)视频文件,MP4、WMV等文件

(4)其他

1.4会话和Cookies

爬虫基础——会话和Cookie - 知乎 (zhihu.com)

1.5代理的基本原理

爬虫基础——代理的基本原理 - 知乎 (zhihu.com)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,现在我将为你介绍一个爬虫快速入门案例——豆瓣电影Top250。 首先,你需要准备以下工具和库: 1. Python编程环境 2. requests库:用于发送HTTP请求获取网页内容 3. BeautifulSoup库:用于解析HTML页面 4. pandas库:用于数据处理和存储 下面是一个简单的爬虫代码示例: ```python import requests from bs4 import BeautifulSoup import pandas as pd def get_movie_info(movie_url): response = requests.get(movie_url) soup = BeautifulSoup(response.text, 'html.parser') # 获取电影名称 movie_name = soup.find('span', class_='title').text # 获取电影评分 rating = soup.find('span', class_='rating_num').text # 获取电影信息 info = soup.find('div', class_='info') director = info.find('a').text actors = [a.text for a in info.find_all('a')[1:]] movie_info = { '电影名称': movie_name, '评分': rating, '导演': director, '演员': actors } return movie_info def crawl_top250_movies(): base_url = 'https://movie.douban.com/top250' movies = [] for start in range(0, 250, 25): url = f'{base_url}?start={start}' response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') movie_items = soup.find_all('div', class_='item') for movie_item in movie_items: movie_url = movie_item.find('a')['href'] movie_info = get_movie_info(movie_url) movies.append(movie_info) return movies movies = crawl_top250_movies() df = pd.DataFrame(movies) df.to_csv('top250_movies.csv', index=False) print('豆瓣电影Top250爬取完成并保存为top250_movies.csv文件。') ``` 这段代码会爬取豆瓣电影Top250的电影名称、评分、导演和演员信息,并将结果保存为一个CSV文件。 注意:爬虫是一种获取网页数据的技术,请务必尊重网站的使用规则,不要频繁发送请求或者对网站造成过大的负载。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值