Python学习之路(爬虫基础)

Python学习之路(爬虫基础)

前两部分已经更新了python我认为一些比较难以区分开来的数据类型已经针对excel及csv文件的操作,在涉及到神经网络训练亦或是数学建模中,前面所提到的两部分往往至关重要。数据格式不清晰操作不正确或者是不懂得如何处理excel文件,在前期数据预处理的部分往往会耗费大量的时间和精力,而且往往debug后知其然而不知所以然。因此,爬虫这部分往往能够将这部分串起来
(笔者本身不是计算机专业出身,现今读研更是于计算机专业差得十万八千里,研究方向在CV这块,由于太卷了只能是另辟蹊径,所以只能从基础的部分打起)
(下面的部分参考自----零基础学Python爬虫、数据分析与可视化从入门到精通孟兵 李杰臣 编著ISBN:978-7-111-66899-2)(只做笔记摘录的部分,有需要的同学可以上书店买)

1.在谷歌浏览器中使用百度搜索引擎搜索“当当”,然后按【F12】键或按快捷键【Shift+Ctrl+I】,即可打开开发者工具,界面如下图所示。此时窗口的上半部分显示的是网页,下半部分默认显示的是“Elements”选项卡,该选项卡中的内容就是网页源代码。源代码中被“<>”括起来的文本称为Elements对象或网页元素,我们需要提取的数据就存放在这些Elements对象中。在这里插入图片描述

1. 网页结构的组成

pycharm生成:
在这里插入图片描述
下面就来介绍一些常用的HTML标签

(1)div标签

标签定义了一个区块,表示在网页中划定一个区域来显示内容,区块的宽度和高度分别用参数width和height来定义,区块边框的格式(如粗细、线型、颜色等)用参数border来定义,这些参数都存放在style属性下。这里在“test.html”文件的标签下方输入如下图所示的两行代码,添加两个
标签,即添加两个区块 ![在这里插入图片描述](https://img-blog.csdnimg.cn/8339178644e44e1eb1804a8150139e1c.png)

(2).ul标签

在这里插入图片描述

(3).h标签

在这里插入图片描述
在这里插入图片描述

还有许多其他的标签作用(我把图片贴在下面,具体可以再搜索)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.静态网页和动态网页的区别

我这只能做一个大概的解释,在打开浏览器网页按F12间之后跳出代码界面点击network之后,点刷新,上方xrr按钮点一下,会跳出一个界面。界面的左边是name,右边的分区为数据包的部分,在滑动界面的滚动条,如果实时刷新的话代表动态界面,需要不断地访问去获得信息,而没有更新则是静态界面,访问一次即可。

下面是动态界面访问代码(豆瓣动漫)

import requests
import json
url = 'https://movie.douban.com/j/chart/top_list'
params = {'type': '25', 'interval_id': '100:90', 'action': '', 'start': '0', 'limit': '164'}
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3877.400 QQBrowser/10.8.4506.400'}
#User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3877.400 QQBrowser/10.8.4506.400
response = requests.get(url=url, params=params, headers=headers)
content = response.json()
for i in content:print(json.dumps(i, indent=4, ensure_ascii=False, separators=(', ', ': ')))break
with open('豆瓣电影动画排行榜.txt', 'w', encoding = 'utf-8') as fp:for i in content:title = i['title']score = i['score']fp.write(title + '  ' + score + '\n')

再此基础上整一个复杂一点的,当当网的访问。

import requests
import pandas as pd
from bs4 import BeautifulSoup# 设置请求头部信息,模拟浏览器发送请求
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'}# 创建一个字典用于存储图书信息
data_info = {'图书排名': [], '图书名称': [], '图书作者': [], '图书出版时间': [], '图书出版社': [], '图书价格': []}# 解析HTML内容,提取图书信息并存入data_info字典
def parse_html(soup):li_list = soup.select('.bang_list li')  # 使用CSS选择器选取所有具有类名为'bang_list'的li元素for li in li_list:# 提取图书信息并存入data_info字典对应的字段中data_info['图书排名'].append(li.select('.list_num ')[0].text.replace('.', ''))data_info['图书名称'].append(li.select('.name a')[0].text)data_info['图书作者'].append(li.select('.publisher_info ')[0].select('a')[0].text)data_info['图书出版时间'].append(li.select('.publisher_info span')[0].text)data_info['图书出版社'].append(li.select('.publisher_info ')[1].select('a')[0].text)data_info['图书价格'].append(float(li.select('.price  .price_n')[0].text.replace('¥', '')))# 遍历页码,发送请求并解析HTML内容
for i in range(1, 3):# 构建URLurl = f'http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-recent30-0-0-1-{i}'# 发送GET请求,获取HTML内容response = requests.get(url=url, headers=headers, timeout=10)html_content = response.text# 使用BeautifulSoup解析HTML内容soup = BeautifulSoup(html_content, 'lxml')# 解析HTML内容,提取图书信息parse_html(soup)print(f'第{i}页爬取完毕')# 将data_info字典转换为DataFrame对象
book_info = pd.DataFrame(data_info)# 打印是否存在缺失值
print(book_info.isnull())# 打印是否存在重复数据
print(book_info.duplicated())# 将图书价格大于100的值设为None,并删除包含缺失值的行
book_info['图书价格'][book_info['图书价格'] > 100] = None
book_info = book_info.dropna()# 将数据保存为CSV文件
book_info.to_csv('当当网图书销售排行.csv', encoding='utf-8', index=False)

Chatgpt解释:

这段代码是一个简单的爬虫程序,用于爬取当当网图书销售排行榜的数据,并将结果保存为CSV文件。

首先,它导入了需要的库,包括requests用于发送HTTP请求,pandas用于数据处理,以及BeautifulSoup用于解析HTML内容。

接下来,定义了一个名为headers的字典,用于设置请求头部信息,模拟浏览器发送请求。

然后,创建了一个名为data_info的空字典,用于存储爬取的数据。该字典包含了图书排名、图书名称、图书作者、图书出版时间、图书出版社和图书价格等字段。

接着,定义了一个名为parse_html的函数,用于解析HTML内容并将数据存入data_info字典中。函数首先使用CSS选择器选取所有具有类名为bang_listli元素,然后依次遍历每个元素,从中提取图书的相关信息,并将信息存入data_info字典对应的字段中。

在主程序部分,使用一个循环遍历页码,从第1页到第2页,构建对应的URL。然后,使用requests库发送GET请求,获取网页的HTML内容。接着,使用BeautifulSoup解析HTML内容,得到一个BeautifulSoup对象soup。然后,调用parse_html函数解析soup,将数据存入data_info字典中,并打印爬取完成的消息。

接下来,将data_info字典转换为pandas的DataFrame对象book_info,然后调用isnull()方法打印出是否存在缺失值的情况,调用duplicated()方法打印出是否存在重复数据的情况。

然后,对于book_info中的'图书价格'列,将大于100的值设为None,即将价格大于100的图书的价格置空。然后,调用dropna()方法删除包含缺失值的行。

最后,使用to_csv()方法将book_info保存为CSV文件,文件名为当当网图书销售排行.csv,编码方式为UTF-8,且不保存索引信息。

请注意,该代码在爬取过程中使用了HTTP请求头部信息,模拟了浏览器的请求,以防止被目标网站识别为爬虫程序。

Header组成部分:

headers是一个包含HTTP请求头部信息的字典。在这段代码中,headers被用于设置请求头部信息,模拟浏览器发送请求。

HTTP请求头部包含了客户端(例如浏览器)发送给服务器的附加信息,用于描述请求或者请求中的内容。常见的请求头部信息包括User-AgentAcceptContent-Type等。

在这段代码中,headers字典中的User-Agent字段指定了浏览器的用户代理信息,用于模拟浏览器发送请求。通过设置合适的用户代理信息,可以使请求看起来像是由真实的浏览器发送的,而不是爬虫程序发送的。

具体来说,User-Agent字段的值是一个字符串,表示浏览器的标识信息。在这个例子中,User-Agent的值是Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36,它表示一个基于Chrome浏览器的用户代理信息。

通过设置合适的User-Agent,可以避免被目标网站识别为爬虫程序,提高爬取数据的成功率。这是因为某些网站可能会对不符合常规浏览器标识的请求进行限制或阻止,通过设置合理的User-Agent可以绕过这些限制。

总之,headers字典中的User-Agent字段用于在发送请求时设置请求头部中的用户代理信息,以模拟浏览器发送请求。

HTML的组成:

HTML(Hypertext Markup Language)是用于创建网页的标准标记语言。它由一系列标签(Tags)组成,这些标签用于定义网页的结构和内容。以下是HTML中的一些重要的组成部分:

  1. 标签(Tags):HTML中的标签是用尖括号包围的元素,用于表示不同类型的内容和结构。标签通常是成对出现的,包括一个开始标签和一个结束标签。开始标签用来定义元素的开始,结束标签用来定义元素的结束。例如,<h1></h1>是标题元素的开始和结束标签。

  2. 元素(Elements):元素是由开始标签、内容和结束标签组成的整体,用于定义网页中的不同部分。元素包含在标签中,例如<h1>这是一个标题</h1>,其中<h1>是开始标签,</h1>是结束标签,而这是一个标题是元素的内容。

  3. 属性(Attributes):属性提供了有关元素的额外信息。属性包含在开始标签中,由属性名和属性值组成。属性名和属性值之间使用等号连接。例如,在<img>标签中,srcalt就是两个常用的属性,用于指定图像的源文件和替代文本。

  4. 文本内容(Text Content):HTML中的文本内容是指出现在标签中的可见文本。它可以是普通的文本,也可以是链接、段落、标题等。文本内容可以直接写在元素内部,也可以通过属性或子元素进行设置。

  5. 嵌套关系(Nesting):HTML允许元素相互嵌套,即一个元素包含在另一个元素内部。通过嵌套,可以创建出层次结构丰富的网页。例如,<div>元素可以包含多个其他元素,形成一个块级容器。

  6. 注释(Comments):注释是在HTML代码中添加的一种说明文本,用于对代码进行注释或提供说明。注释不会在浏览器中显示,只是给开发人员阅读和理解代码时使用。

这些是HTML中的一些重要的组成部分。HTML的结构和语法规则决定了网页的布局、样式和交互行为。开发人员使用HTML来描述网页的结构和内容,通过与CSS(层叠样式表)和JavaScript等技术的结合,可以实现丰富多样的网页功能和交互效果。

Div内部元素:

<div>是HTML中的一个常用的块级元素,用于创建一个容器,可以包含其他HTML元素。<div>本身并没有特定的含义或语义,它主要用于在网页中创建一个逻辑上的分组或容器,方便对其内部的元素进行样式化或布局。

<div>元素可以包含各种其他HTML元素,例如文本、图像、链接、表格、表单等。它可以用于创建网页的各个部分,如页眉、导航栏、侧边栏、主内容区域等。

以下是一些常见的元素,可以包含在<div>元素内部:

  • 文本内容(Text Content):可以直接在<div>内部添加文本内容,例如段落(<p>)、标题(<h1>-<h6>)等。
  • 图像(Image):使用<img>标签可以在<div>内部插入图像。
  • 链接(Link):使用<a>标签可以在<div>内部创建链接到其他页面或资源的链接。
  • 列表(List):使用有序列表(<ol>)、无序列表(<ul>)和列表项(<li>)来创建项目列表。
  • 表格(Table):使用<table><tr><td>等标签可以在<div>内部创建表格。
  • 表单(Form):使用<form>标签可以在<div>内部创建表单,包括输入字段、按钮等。
  • 其他HTML元素:除了上述常见元素外,还可以包含其他HTML元素,如视频(<video>)、音频(<audio>)、嵌入式内容(<iframe>)等。

通过将这些元素放置在<div>内部,可以组织和管理网页的结构和内容,同时可以方便地应用样式和布局。在CSS中,可以通过选择器选择<div>元素,并对其内部的元素应用样式。

需要注意的是,<div>仅仅是一个通用的容器元素,不具备特定的语义。如果要为特定的内容或功能选择更合适的HTML元素,应该优先考虑使用具有语义的元素,以提高网页的可访问性和可理解性。

(参考自----零基础学Python爬虫、数据分析与可视化从入门到精通孟兵 李杰臣 编著ISBN:978-7-111-66899-2)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/15470.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机专业学生如何确定自己的方向

关于计算机专业学生如何确定自己的方向是一件很重要的事情&#xff0c;我自己也是大学大一开学自己慢慢摸索的&#xff0c;摸索了快一年确定了自己的方向C和Linux服务器开发&#xff0c;所以我会把我所认知的分享出来&#xff0c;关于还不知道自己方向的还在迷茫的同学希望这编…

【AI编程工具合集】42 款 AI 代码助手工具大盘点!开发效率神器!

0. 未来百科 未来百科(https://nav.6aiq.com)&#xff0c;是一个知名的AI产品导航网站 —— 为发现全球优质AI工具而生 。目前已 聚集全球3000优质AI工具产品 &#xff0c;旨在帮助用户发现全球最好的AI工具&#xff0c;同时为研发AI垂直应用的创业公司提供展示窗口&#xff0c…

chatgpt赋能python:PythonTile:一种强大的界面构建工具

Python Tile&#xff1a;一种强大的界面构建工具 Python Tile是一种基于Python编程语言的界面构建工具&#xff0c;其目的是帮助开发者快速创建精美的用户界面&#xff0c;从而提高应用程序的用户体验。本文将介绍Python Tile的功能和优势&#xff0c;并讨论其在实际开发中的应…

chatgpt赋能python:Python代码出现错误?别慌!这里有一些有用的调试技巧和工具!

Python代码出现错误&#xff1f;别慌&#xff01;这里有一些有用的调试技巧和工具&#xff01; Python作为一种高级编程语言&#xff0c;简单易学&#xff0c;便于使用。但是&#xff0c;像所有语言一样&#xff0c;Python代码可能会出现错误。在这篇文章中&#xff0c;我将介…

chatgpt赋能python:Python内置GUI:使用Tkinter构建优秀的用户接口

Python内置GUI&#xff1a;使用Tkinter构建优秀的用户接口 当今&#xff0c;Graphical User Interface&#xff08;GUI&#xff09;是软件界面设计中的重要组成部分。GUI可以使软件效果更加醒目且易用&#xff0c;可使用户能够快速而轻松地使用各种应用程序&#xff0c;从而提…

python操作word——python-docx和python-docx-template模块

前言&#xff1a;项目用到了导出文档&#xff0c;综合考虑使用python-docx模块 目录 python-docx安装docx文档布局词汇三个部分文档段落文字块 四级结构&#xff08;表格&#xff09; 使用导入word读操作获取段落获取段落文本内容获取文字块文本内容遍历表格表格设置字体样式 …

工具软件中的一些操作记录

工具软件中的一些操作记录 0. 目的&#xff1a;A. VisioA01.Visio图跨文件复制保持原样A02.带有公式的visio 插入到word后模糊变形&#xff0c;如何保持原样&#xff1f; B. Windows系统B01. Windows 防火墙自动吞下载文件&#xff0c;提示病毒 C. Visual StudioC01. C/C 混合编…

C++及QT5.12.6学习日记第一周(3.1-3.7)

目录 第一天3.1 星期三 第二天3.2 星期四 第三天3.3 星期五 第四天3.4 星期六 第五天3.5 星期日 第六天3.6 星期一 第七天3.7 星期二 本周总结&#xff1a; 第一天3.1 星期三 软件安装与环境配置V C常用编译器有&#xff1a;DevC、VC6.0、Visual Studio等 安装Vis…

Qt+html+JavaScript实现类似QQ聊天界面的气泡效果

这是一个简单的类似QQ聊天界面的Demo&#xff0c;用Qt实现&#xff0c;在QWebView里嵌入网页的方式实现。先看效果图&#xff1a; 无论怎样&#xff0c;我觉得自己动手写出来的东西才是自己的&#xff0c;所以源码不全&#xff0c;重点的代码我会放上来。只是模拟实现了两个…

基于Qt的聊天软件设计实现手把手教学——高仿QQUI设计(一)

文章目录 前言一、使用工具1. Qt Creator 二、项目介绍1.客户端1.1 Socket套接字 2.服务端2.1 数据库2.2 数据处理 3.效果图4.总体系统架构图 小结 前言 最近想把自己毕业设计拿出来分享&#xff0c;我是做了一个可以通过局域网聊天的一个聊天软件。UI设计方面我也是尽力往QQ方…

基于QML模拟QQ群聊窗口

据说最近要开发简单的IM工具,于是兴起,研究了下QQ聊天窗口,大概模拟了一下群聊的聊天显示界面,遂与大家分享之 画面粗糙还望海涵 图片有点大,原理基本就是使用listview来显示每一条记录,别人的记录显示在左侧,自己的聊天记录显示在右侧,但是他们公用的一个内容控件 贴下…

❤️Java实现模拟QQ(消息通信+登陆界面美化)❤️

一、登陆界面的实现 登陆界面主要使用了JFrame&#xff0c;以及相关的一些组件&#xff0c;并且在界面中加上监听 登陆界面效果图 登陆界面代码Login类 package com.lding.login;import com.lding.ui.MsgUI;import javax.swing.*; import java.awt.*; import java.io.IOExce…

QT qq登陆界面设计

使用C结合Qt设计的类似QQ的登录界面&#xff0c;以Ui以及代码结合的方式实现&#xff0c;实现了账号注册、号密对比等功能。先看看效果图&#xff1a; 登录界面&#xff1a; 注册界面&#xff1a; 一共有两个窗口&#xff0c;通过槽函数绑定按钮来显示弹窗&#xff08;注册界面…

QT学习之QQ聊天案例

1、实现功能 本程序模拟实现QQ群聊功能&#xff0c;采用UDP通信方式&#xff0c;可以设置字体&#xff0c;保存聊天记录等&#xff0c;实时显示上线离开人数以及具体人员。可视为简化版的腾讯QQ。目前只有群聊&#xff0c;未实现一对一单独聊天。 完整源代码见&#xff1a;ht…

【教学类-36-01】Midjounery生成的四张图片切片成四张小图

作品展示&#xff1a; 把一张正方形图片的四个等大小图切割成四张图片 背景需求 最近在学习ChatGPT的绘画&#xff08;midjounery AI艺术&#xff09; 我想给中班孩子找卡通动物图片&#xff08;黑白线条&#xff09;&#xff0c;打印下来&#xff0c;孩子们练习描边、涂色…

chatgpt赋能python:Python校验身份证号码真伪

Python校验身份证号码真伪 身份证号码是我们日常生活中非常重要的证件&#xff0c;但也有一些人从事非法活动&#xff0c;对身份证号码进行伪造或者篡改。为了保护公民的合法权益&#xff0c;我们需要使用技术手段来校验身份证号码真伪。而Python作为一种广泛应用于数据处理和…

【科普级别:刚出炉的ChatGPT三连问】

科普级别&#xff1a;刚出炉的ChatGPT三连问 前言【ChatGPT是什么&#xff1f;对我们的生活有什么影响&#xff1f;】【中国为什么不能使用ChatGPT&#xff1f;美国想让中国用户使用吗&#xff1f;】【通义千问、文心一言、ChatGPT你更看好哪一个&#xff1f;】 前言 有些人连C…

又一个国内类ChatGPT模型?【秘塔科技上线自研LLM大模型「对话写作猫」】

又一个国内类ChatGPT模型&#xff1f;【秘塔科技上线自研LLM大模型「对话写作猫」】 &#xff08;马上被打脸 ~ ~&#xff09; 一直期待中国有没有类ChatGPT产品可以出现。 昨天&#xff0c;2023年2月27日&#xff0c;秘塔科技上线了自研LLM大模型「对话写作猫」&#xff0c;…

小白入门区块链(通俗易懂)

区块链基础入门 什么是区块链 科技层面解释 数学&#xff0c;密码学&#xff0c;互联网&#xff0c;计算机编程官方解释 区块链是一个分布式的共享账本和数据库&#xff0c;具有去中心化&#xff0c;不可篡改&#xff0c;全程留痕&#xff0c;可以追溯&#xff0c;集体维护&am…

2023年加密行业会更难吗?欧科云链研究院“七大趋势预测”

回望2022&#xff0c;加密行业遭遇了种种不可控因素而导致的艰难险阻&#xff0c;也在变革与发展中孕育着生机与活力。 这一年&#xff0c;我们亲眼目睹了Luna暴雷&#xff0c;三箭资本、FTX这些曾经被认为“大而不倒”的机构接连倒下&#xff0c;市场信心严重受挫&#xff1b…