静态网页抓取

在网站设计中,纯HTML格式的网页通常被称之为静态网页,在网络爬虫中静态网页的数据比较容易抓取,因为说有的数据都呈现在网页的HTML代码中。相对而言使用Ajax动态加载的玩个的数据不一定会出现在HTML代码中,就给爬虫抓取增加了难度。

在静态网页抓取中,有一个强大的requests库能够让你轻松的发送HTTP请求,这个库功能完善,而且操作非常简单。

安装requestS

通过pip安装,打开cmd或terminal,键入:

pip install requests

获取响应内容

print("文本编码", r.encoding)

print("响应状态码:", r.status_code)

print("字符串方式的响应体:", r.text)

  • r.text是服务器响应的内容,会自动根据响应头的字符编码进行解码
  • r.encoding是服务器内容使用的文本编码
  • r.status_code用于检测响应的状态码,200请求成功,4xx客户端错误,5xx服务器错误
  • r.content是字节方式的响应体,会自动解码gzip和deflate编码的响应数据
  • r.json()是requests中的内置JSON解码器

指定requests

有些网页需要对request的参数进行测试才能获取需要的数据,这包括url传参,定制请求头,发送post请求,设置超时等。

传递URL参数

如果是自己构建URL那么数据一般会跟在一个问号后面,并且以键值对的形式存放在URL中,例如:https://www.baidu.com/s?ie=UTF-8&wd=pycharm 代码块

keydict = {'key1': '111', 'key2': '222'}

r = requests.get(link, params=keydict)

print("rul已经正确编码", r.url)

print("响应体:\n", r.text)

定制请求头

import requests # 最简单易用的HTTP库

heders = {

'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '

'Chrome/96.0.4664.110 Safari/537.36',

'Host': 'www.santostang.com'

}

r = requests.get(link, headers=heders)

print('响应状态码:', r.status_code)

发送post请求

除了GET请求外,又是还需要发送一些表单形式的数据,如果在登录的时候请求就为post,如果用GET请求密码就会显示在地址栏中,这非常的不安全

keydict = {'key1': '111', 'key2': '222'}

r = requests.post(link, data=keydict)

print(r.text)

超时

有时候爬虫遇到服务器长时间不返回,这爬虫程序就会一直等待,造成爬虫程序没有顺利执行。可以在request中timeout参数设定秒数,指定时间内没有响应就返回异常,一般设置为20秒

request爬虫实践:top250电影数据

点击查看代码
def get_movies():
headers = {
'Host': 'movie.douban.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36',
'charset': 'utf-8'
}
movie_list = []
for i in range(0, 10):
link = 'https://movie.douban.com/top250?start=' + str(i * 25)
r = requests.get(link, headers=headers, timeout=10, allow_redirects=False)
print(str(i + 1), "页响应状态码:", r.status_code)
soup = BeautifulSoup(r.text, "html.parser")
div_list = soup.find_all('div', class_='hd')
for each in div_list:
movie = each.a.span.text.strip()
movie_list.append(movie)
return movie_list
movies = get_movies()
print(movies)

python网络爬虫-静态网页抓取(四)的更多相关文章

  1. python网络爬虫-动态网页抓取(五)

    动态抓取的实例 在开始爬虫之前,我们需要了解一下Ajax(异步请求).它的价值在于在与后台进行少量的数据交换就可以使网页实现异步更新. 如果使用Ajax加载的动态网页抓取,有两种方法: 通过浏览器审查 ...

  2. python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容

    python3.4学习笔记(十七) 网络爬虫使用Beautifulsoup4抓取内容 Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖 ...

  3. PHP网络爬虫实践:抓取百度搜索结果,并分析数据结构

    百度的搜索引擎有反爬虫机制,我先直接用guzzle试试水.代码如下: <?php /** * Created by Benjiemin * Date: 2020/3/5 * Time: 14:5 ...

  4. Python开发爬虫之静态网页抓取篇:爬取“豆瓣电影 Top 250”电影数据

    所谓静态页面是指纯粹的HTML格式的页面,这样的页面在浏览器中展示的内容都在HTML源码中. 目标:爬取豆瓣电影TOP250的所有电影名称,网址为:https://movie.douban.com/t ...

  5. Python网络爬虫与如何爬取段子的项目实例

    一.网络爬虫 Python爬虫开发工程师,从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页 ...

  6. Python实现简单的网页抓取

    现在开源的网页抓取程序有很多,各种语言应有尽有. 这里分享一下Python从零开始的网页抓取过程 第一步:安装Python 点击下载适合的版本https://www.python.org/ 我这里选择 ...

  7. Python 网络爬虫 002 (入门) 爬取一个网站之前,要了解的知识

    网站站点的背景调研 1. 检查 robots.txt 网站都会定义robots.txt 文件,这个文件就是给 网络爬虫 来了解爬取该网站时存在哪些限制.当然了,这个限制仅仅只是一个建议,你可以遵守,也 ...

  8. Python——初识网络爬虫(网页爬取)

    网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕虫 ...

  9. 网络爬虫中Fiddler抓取PC端网页数据包与手机端APP数据包

    1 引言 在编写网络爬虫时,第一步(也是极为关键一步)就是对网络的请求(request)和回复(response)进行分析,寻找其中的规律,然后才能通过网络爬虫进行模拟.浏览器大多也自带有调试工具可以 ...

随机推荐

  1. 【九度OJ】题目1178:复数集合 解题报告

    [九度OJ]题目1178:复数集合 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1178 题目描述: 一个复数(x+iy)集合,两种 ...

  2. Anniversary party(hdu1520)

    Anniversary party Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  3. VR AR MR的未来

    VR:VR(Virtual Reality,即虚拟现实,简称VR),是由美国VPL公司创建人拉尼尔(Jaron Lanier)在20世纪80年代初提出的.其具体内涵是:综合利用计算机图形系统和各种现实 ...

  4. 当MySQL执行XA事务时遭遇崩溃,且看华为云如何保障数据一致性

    摘要:当前MySQL所有版本不支持分布式事务的崩溃恢复安全,这严重影响了分布式事务的高可用保障. 华为云数据库内核高级技术专家,拥有十多年MySQL内核研发经验,目前在华为云数据库团队研发华为云数据库 ...

  5. Kibana_X-Pack管理Elasticsearch权限

    在Kibana上面配置权限,验证对Elasticsearch权限控制, 主要步骤如下: 1.创建角色 2.创建用户,并且赋予用户角色 3.用户登陆,验证没有权限 4.赋予角色权限 5.用户登陆,验证拥 ...

  6. docker简单安装

    docker的安装官网有很直接的教程,直达链接: Ubuntu:https://docs.docker.com/engine/install/ubuntu/ CentOS:https://docs.d ...

  7. BUG—Nuget包版本不一致导致程序行为与预期不符

    注:本文收录于<Bug集锦>,请点击此处查看全文目录 BUG起因 先介绍一下背景: 数周前的一个极其平常的下午,完成了本次迭代的开发工作,发布到QA提测,然后开始摸鱼.没几分钟,测试就来找 ...

  8. CSS实战 模拟 新闻列表

    总结:所使用的知识点:1.padding应用以及box-sizing: border-box自动内减撑大的盒子 2.ul>li 的使用,去除黑圆圈 3.a标签的使用,去除默认样式<下划线& ...

  9. 读取 properties 配置文件含有中文的value内容 导致中文乱码 的解决办法

    1.前言 因为装系统的时候把中文写在了系统路径,现在我想把这个路径写在properties里面来读取,可是 发现java 读取会导致中文乱码成 问号????的乱码  ,百度找了好多博客,基本都是一摸一 ...

  10. SQL高级优化(二)之MySQL架构

    一.架构 想要学好SQL优化就必须从对应数据库的基本架构开始学习 架构图如下 二.架构分析 1. 连接管理与安全验证 ​     MySQL有连接池(Connection Pool)管理客户端的连接. ...