怎样抓取网页数据(爬虫什么是爬虫?什浏览器发送的消息后)

优采云 发布时间: 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网络爬虫视频教程的笔记:

  课程链接:

  崔老师的课对我很有帮助,再次感谢。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线