怎样抓取网页数据(爬虫什么是爬虫?什浏览器发送的消息后)
优采云 发布时间: 2022-04-19 14:27怎样抓取网页数据(爬虫什么是爬虫?什浏览器发送的消息后)
爬行动物的基本介绍
1. 什么是爬虫?
爬虫是请求 web网站 并提取数据的自动化程序
2. 爬虫的基本流程
发出请求
通过HTTP库向目标站点发起请求,即发送Request,请求中可以收录额外的headers等信息,等待服务器响应。
解析内容
如果服务器能正常响应,就会得到一个Response。Response的内容就是要获取的页面的内容。类型可以是 HTML、Json 字符串、二进制数据(如图片和视频)等类型。
获取响应内容
获取的内容可以是HTML,可以用正则表达式和网页解析库来解析。可能是Json,可以直接转换成Json对象解析,也可能是二进制数据,可以保存或者进一步处理。
保存数据
有多种保存形式,可以保存为文本,保存到数据库,或者保存为特定格式的文件。
3. 什么是请求和响应?
浏览器向 URL 所在的服务器发送消息,这个过程称为 HTTP 请求。
服务器接收到浏览器发送的消息后,可以根据浏览器发送的消息内容进行相应的处理,然后将消息发送回浏览器。此过程称为 HTTP 响应。
浏览器收到服务器的Response信息后,会对信息进行相应的处理,然后显示出来。
3.1 请求中收录什么?
请求方式:主要有GET和POST两种,另外还有HEAD、PUT、DELETE、OPTIONS等。
请求头:收录请求过程中的头信息,如User-Agent、Host、Cookies等信息。
请求 URL:URL 的全称是统一资源定位器。例如,网页文档、图片、视频等都可以由URL唯一确定。
请求体:请求过程中携带的附加数据,如表单提交时的表单数据
3.2 响应中收录什么?
响应状态:有多种响应状态,如200成功,301重定向,404页面未找到,502服务器错误
响应头:如内容类型、内容长度、服务器信息、设置cookies等。
响应体:最重要的部分,包括请求资源的内容,如网页HTML、图片二进制数据等。
4. 爬虫可以抓取什么样的数据?
网页文本:如HTML文档、Json格式文本等。
Image:得到的二进制文件以图像格式保存。
视频:两者都是二进制文件,可以保存为视频格式。
其他:只要能要求,就能得到。
5. 怎么解析呢?
直接加工
json解析
正则表达式
美丽汤
查询
Xpath
6. 如何保存数据?
文本:纯文本、Json、Xml 等。
关系型数据库:如MySQL、Oracle、SQL Server等,都是以结构化表结构的形式存储的。
非关系型数据库:如MongoDB、Redis等键值存储。
二进制文件:如图片、视频、音频等,可以直接以特定格式保存。
爬虫爬取网易新闻排名。
1. 确定目标
经过对各个新闻门户网站的排名进行讨论、分析和比较,最终选出内容正规、不良信息少、广告少的网易新闻排名。每小时抓取一次,选出点击率最高的前 20 条热门新闻。也就是红框中选中的内容。
2. 分析登陆页面
登陆页面:
通过分析网页的源码,我们知道这个网页排行榜并不是通过JavaScript动态加载生成的。所以网页爬取后可以直接处理,只需使用BeautifulSoup+requests库就可以实现。
3. 实现过程
3.1 请求目标网页并存储网页源文件
# 导入对应的包
从 bs4 导入 BeautifulSoup
导入请求
重新*敏*感*词*
导入日期时间
从 connect_mysql 导入 *
# 获取当前时间,指定格式为2018041018
时间 = datetime.datetime.now().strftime("%Y%m%d%H")
网址 = r'#39;
# 模拟真实浏览器访问
标头 = {'用户代理':
'Mozilla/5.0 (Windows NT 10.0; WOW64)'
'AppleWebKit/537.36(KHTML,像壁虎)'
'Chrome/55.0.2883.87 Safari/537.36'}
响应 = requests.get(url, headers=headers)
page_html = response.text
3.2 将获取的内容转换为BeautifulSoup格式,使用html.parser作为解析器
汤 = BeautifulSoup(page_html, 'html.parser')
3.3 分析汤
首先通过分析网站的结构可知,我们需要的数据在class=tabContents active的div下的所有a标签中,而这个div嵌套在class=area-的div中还剩一半。所以我们写了下面的代码,从网页的源代码中找出所有符合要求的标题,限制为20个。
title = soup.find('div', 'area-half left').find('div', 'tabContents active').find_all('a', limit=20)
只需一行代码,我们就获得了一些我们需要的数据。接下来,继续获取对我们有用的新数据并将其存储在数据库中。
3.4 进一步处理来自 3.3 的结果
由于页面标题显示不完整,导致上一步爬取的标题部分不完整。所以我们需要爬得更远。步骤与上述操作类似,爬取新闻链接、新闻内容,完成新闻头条。这三个内容,并调用自己编写的方法将数据存入数据库。并使用 re 库对内容进行简单处理(去掉 \n\t\r ),具体实现如下。
标题中的标题:
'''
news_url:新闻链接
news_html:新闻页面网页源代码
'''
news_url = (str(title.get('href')))
news_response = requests.get(news_url, headers=headers)
news_html = news_response.text
# 将获取的内容转换为BeautifulSoup格式,使用html.parser作为解析器
news_soup = BeautifulSoup(news_html, 'html.parser')
# 从网页源码中找到属于post_text类的div,将所有p标签内容存放在news_contents列表中
if news_soup.find('div', 'post_text') is None: # 如果网页丢失,跳出这个循环
继续
news_title = news_soup.find('h1')
内容 = news_soup.find('div', 'post_text').find_all('p')
新闻内容 = []
对于内容中的内容:
如果 content.string 不是无:
# 删除特殊字符
news_contents.append(re.sub('[\r\n\t ]', '', str(content.string)))
#字符串连接
news_contents = ''.join(news_contents)
# 将爬取的数据存入数据库
insert_wangyinews_into_mysql(wangyi_news, str(news_title.string), news_url, news_contents, 时间)
这样一个简单的爬虫就完成了,不要小看这几十行代码,它们在这个项目中发挥了巨大的作用。
本文使用的开发环境:
蟒蛇5.1
pycharm
本文第一部分为崔庆才老师python3网络爬虫视频教程的笔记:
课程链接:
崔老师的课对我很有帮助,再次感谢。