著名的响应式网站有哪些,国外哪个网站做服装,jsp做网站实例教程,做seo前景怎么样目录
1 HTTP协议
2 HTTP与HTTPS
3 HTTP请求过程 3.1 HTTP请求过程
3.2 GET请求与POST请求
3.3 常用请求报头
3.4 HTTP响应
4 HTTP请求库requests 常用语法
4.1 发送GET请求 4.2 发送POST请求
4.3 请求参数和头部
4.4 编码格式
4.5 requests高级操作-文件上传
4.6 …目录
1 HTTP协议
2 HTTP与HTTPS
3 HTTP请求过程 3.1 HTTP请求过程
3.2 GET请求与POST请求
3.3 常用请求报头
3.4 HTTP响应
4 HTTP请求库requests 常用语法
4.1 发送GET请求 4.2 发送POST请求
4.3 请求参数和头部
4.4 编码格式
4.5 requests高级操作-文件上传
4.6 requests高级操作-获取cookie
4.7 request高级操作-证书验证
5 实战
利用requests 库抓取2023年高考新闻的标题和链接 1 HTTP协议 HTTP协议Hypertext Transfer Protocol HTTP是一种用于在客户端和服务器之间传输数据的协议。它基于请求-响应模型客户端发送HTTP请求服务器返回HTTP响应。HTTP协议主要用于Web浏览器和服务器之间的通信用于获取、传输和展示Web页面和资源。 在网络爬虫中HTTPHypertext Transfer Protocol协议起着至关重要的作用它是用于在客户端和服务器之间传输数据的协议。下面是HTTP协议在爬虫中的一些关键作用 获取网页内容 爬虫使用HTTP协议来向服务器发送请求以获取网页的内容。通过发送GET请求爬虫能够请求服务器返回网页的HTML代码。 发送请求 爬虫可以使用不同的HTTP请求方法如GET、POST、PUT等来向服务器发送不同类型的请求。GET请求用于获取资源而POST请求用于提交数据PUT请求用于更新资源等等。 传递参数 爬虫可以通过HTTP请求的URL参数或请求体参数来传递各种数据如查询参数、表单数据等。这在爬取特定数据或进行搜索时非常有用。 设置请求头 爬虫可以在HTTP请求中设置请求头包括User-Agent、Referer、Cookie等以模拟不同类型的浏览器行为或者绕过网站的反爬措施。 处理响应 服务器返回HTTP响应其中包含状态码、响应头和响应体。爬虫可以根据状态码来判断请求是否成功从响应头中获取信息以及从响应体中提取网页内容。 解析HTML内容 爬虫通过解析HTML内容从中提取所需的信息。这通常涉及使用库如Beautiful Soup来解析网页的DOM结构。 模拟登录 对于需要登录才能访问的网站爬虫可以通过模拟POST请求提交登录表单以获取登录后的数据。 反爬处理 爬虫可能会遇到网站的反爬机制如限制访问频率、验证码等。在这种情况下爬虫需要适当调整请求头、使用代理IP等来绕过这些限制。 总之HTTP协议是爬虫工作的基础通过向服务器发送请求和解析服务器的响应爬虫可以从网页中获取所需的数据然后进行处理、分析和存储。同时了解HTTP协议的各种特性和机制能够帮助爬虫更有效地操作和与服务器交互。
1.1 HTTP请求结构 一个HTTP请求由以下几部分组成 请求行Request Line 包含请求方法、目标URL和协议版本。请求头Request Headers 包含关于请求的元信息如User-Agent、Accept、Cookie等。空行 用于分隔请求头和请求体。请求体Request Body 仅在使用POST等方法时出现包含请求的实际数据。 1.2 HTTP响应结构 一个HTTP响应由以下几部分组成 状态行Status Line 包含协议版本、状态码和状态信息。响应头Response Headers 包含关于响应的元信息如Content-Type、Content-Length等。空行 用于分隔响应头和响应体。响应体Response Body 包含响应的实际数据如HTML内容、JSON数据等。 1.3 常见的HTTP方法 GET 用于从服务器获取数据将数据附加在URL中。POST 用于向服务器提交数据将数据包含在请求体中。PUT 用于更新服务器上的资源将数据包含在请求体中。DELETE 用于从服务器删除资源将数据附加在URL中。HEAD 类似于GET但只返回响应头用于获取资源的元信息。OPTIONS 用于查询服务器支持的HTTP方法。 1.4 常见的HTTP状态码 200 OK 请求成功。201 Created 资源已成功创建。400 Bad Request 请求有误。401 Unauthorized 请求未经授权。403 Forbidden 服务器拒绝请求。404 Not Found 请求的资源不存在。500 Internal Server Error 服务器内部错误。 示例 以下是一个简单的示例演示如何使用Python的http.server模块创建一个简单的HTTP服务器并发送GET和POST请求。您可以在终端中运行此示例然后在浏览器中访问相应的URL。
# 创建一个简单的HTTP服务器
# 在终端运行python http_server_example.py
import http.server
import socketserverclass MyHandler(http.server.SimpleHTTPRequestHandler):def do_GET(self):self.send_response(200)self.send_header(Content-type, text/html)self.end_headers()self.wfile.write(bHello, GET request!)def do_POST(self):content_length int(self.headers[Content-Length])post_data self.rfile.read(content_length)self.send_response(200)self.send_header(Content-type, text/html)self.end_headers()response fHello, POST request! Data: {post_data.decode()}self.wfile.write(response.encode())if __name__ __main__:PORT 8000with socketserver.TCPServer((, PORT), MyHandler) as httpd:print(fServing at port {PORT})httpd.serve_forever()在浏览器中访问http://localhost:8000可以看到服务器响应。可以使用工具如curl或者requests库发送HTTP请求并接收响应。
2 HTTP与HTTPS HTTPHypertext Transfer Protocol和HTTPSHypertext Transfer Protocol Secure都是用于在客户端和服务器之间传输数据的协议但它们之间存在着重要的安全和加密差异。 HTTPHypertext Transfer Protocol HTTP是一种用于传输超文本数据的协议它在Web浏览器和Web服务器之间进行通信。HTTP协议是明文传输的这意味着传输的数据不加密可能容易被窃听和篡改。它通常使用80端口进行通信。 HTTPSHypertext Transfer Protocol Secure HTTPS是HTTP的安全版本它通过使用加密和认证机制来保护传输的数据。在HTTPS中数据被加密后传输从而更难以被窃听和篡改。为了实现加密HTTPS使用了SSLSecure Sockets Layer或TLSTransport Layer Security协议。HTTPS通常使用443端口进行通信。 主要区别 安全性 最显著的区别是安全性。HTTP不加密数据而HTTPS通过加密保护数据传输确保数据的机密性和完整性。 加密 HTTPS使用SSL或TLS协议对数据进行加密使得数据在传输过程中无法被轻易窃听或篡改。HTTP不提供加密数据可能被第三方监视和修改。 认证 HTTPS在加密过程中还可以对服务器进行身份认证确保您与正确的服务器进行通信。HTTP不提供此功能可能容易受到中间人攻击。 URL前缀 HTTP的URL以 http:// 开头而HTTPS的URL以 https:// 开头。 虽然HTTPS在安全性方面优于HTTP但由于加密和解密过程会带来一些计算开销所以HTTPS稍微比HTTP慢一些。然而随着计算能力的提升HTTPS的性能差距逐渐减小。 在现代网络中保护用户隐私和数据的安全性非常重要因此许多网站都在切换到使用HTTPS来确保用户数据的保护。
3 HTTP请求过程 3.1 HTTP请求过程 HTTP请求过程涉及客户端向服务器发送请求服务器处理请求并返回响应。以下是HTTP请求的基本过程 客户端发起HTTP请求包括请求方法GET、POST等、目标URL、请求头、请求体等。服务器接收并处理请求根据请求方法和URL找到对应的资源。服务器生成HTTP响应包括状态码、响应头、响应体等。服务器将响应发送回客户端。客户端接收响应并处理响应内容。 3.2 GET请求与POST请求 GET和POST是HTTP请求方法用于向服务器发送请求。 GET请求 用于从服务器获取数据通过URL传递参数请求参数在URL中可见适用于获取数据。POST请求 用于向服务器提交数据请求参数在请求体中传递对数据进行添加、修改等操作。 3.3 常用请求报头 HTTP请求中的请求报头Request Headers包含关于请求的额外信息如用户代理、内容类型等。以下是一些常见的请求报头 User-Agent 标识客户端通常是浏览器的类型和版本。Content-Type 指定请求体的媒体类型如application/json、application/x-www-form-urlencoded等。Authorization 包含认证凭据用于进行身份验证。Referer 指示请求的来源URL用于防止CSRF攻击。Cookie 包含客户端的Cookie信息用于保持会话状态。 3.4 HTTP响应 HTTP响应包含服务器对请求的处理结果包括状态码、响应头、响应体等。 状态码Status Code 表示服务器对请求的处理状态如200 OK表示成功404 Not Found表示未找到资源。响应头Response Headers 包含关于响应的元信息如Content-Type、Server等。响应体Response Body 包含实际的响应内容如网页的HTML内容、JSON数据等。 以下是一个示例演示使用Python的requests库发送GET请求然后解析并打印响应内容
import requestsurl https://www.example.com
response requests.get(url)print(Status Code:, response.status_code)
print(Headers:, response.headers)
print(Content:, response.text)4 HTTP请求库requests 常用语法 requests是一个常用的Python库用于发送HTTP请求和处理HTTP响应。以下是requests库的基本用法示例
首先确保您已经安装了requests库。如果没有安装您可以使用以下命令进行安装
pip install requests然后您可以在Python代码中导入requests库并使用它发送HTTP请求和处理响应。
4.1 发送GET请求 使用requests.get()方法以下示例演示如何使用requests库发送一个简单的GET请求并处理响应
import requests# 发送GET请求获取网页内容
url https://www.baidu.com # 替换为您要访问的网页URL
response requests.get(url)
response.encoding utf-8 # 指定编码为UTF-8
html_content response.text# 输出网页内容
print(html_content)常用语法
发起GET请求
import requestsresponse requests.get(https://www.example.com)
print(response.text) # 输出响应内容发起带参数的GET请求
params {key1: value1, key2: value2}
response requests.get(https://www.example.com, paramsparams)发送请求并设置Headers
headers {User-Agent: My User Agent}
response requests.get(https://www.example.com, headersheaders)获取响应状态码
response requests.get(https://www.example.com)
status_code response.status_code获取响应头部信息
response requests.get(https://www.example.com)
headers response.headers获取响应内容字节
response requests.get(https://www.example.com)
content response.content获取响应内容文本
response requests.get(https://www.example.com)
text response.text处理响应中的JSON数据
response requests.get(https://api.example.com/data.json)
data response.json()处理超时
try:response requests.get(https://www.example.com, timeout5) # 5秒超时
except requests.Timeout:print(请求超时)处理异常
try:response requests.get(https://www.example.com)response.raise_for_status() # 抛出HTTP错误状态码异常
except requests.HTTPError as http_err:print(fHTTP错误: {http_err})
except requests.RequestException as req_err:print(f请求异常: {req_err})4.2 发送POST请求
以下示例演示如何使用requests库发送一个POST请求并附带数据
import requests# 登录URL和登录所需的数据
login_url https://mail.163.com/
login_data {username: your_username, # 替换为您的邮箱用户名password: your_password # 替换为您的邮箱密码
}# 创建会话对象
session requests.Session()# 发送POST请求模拟登录
response session.post(login_url, datalogin_data)# 检查登录是否成功
if 退出 in response.text:print(Login successful.)
else:print(Login failed.)在这个示例代码中我们使用requests.Session()来创建一个会话对象这样可以在多个请求之间保持会话状态。然后我们使用session.post()方法发送POST请求来模拟登录。在这个例子中我们使用了163邮箱的登录页面作为示范您需要替换login_url和login_data为实际的登录URL和登录所需的数据。 请注意这只是一个简单示例实际的网站可能会有更复杂的登录逻辑如验证码、动态令牌等。同时爬虫访问网站时需要遵守网站的使用规则和政策确保您的行为合法和合规。 常用语法
发送POST请求
data {key1: value1, key2: value2}
response requests.post(https://www.example.com, datadata)发送JSON数据的POST请求
import jsondata {key1: value1, key2: value2}
headers {Content-Type: application/json}
response requests.post(https://www.example.com, datajson.dumps(data), headersheaders)4.3 请求参数和头部 在使用requests库发送HTTP请求时您可以通过请求参数和头部来传递附加的信息。请求参数通常用于GET请求或者带有查询参数的请求而请求头部用于传递各种信息如用户代理、Cookie等。以下是关于请求参数和头部的示例代码
import requests# 请求参数示例
params {key1: value1,key2: value2
}# 请求头部示例
headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36,Referer: https://www.baiud.com,Cookie: your_cookie_data
}# 发送GET请求带参数和头部
url https://www.baidu.com # 替换为您要访问的网页URL
response requests.get(url, paramsparams, headersheaders)# 输出响应内容
print(response.text)4.4 编码格式 在使用requests库发送HTTP请求时编码格式也称为字符集或字符编码是指用于解码响应内容的规则。requests库会尝试自动识别并设置响应的编码格式但有时您可能需要手动设置编码以确保正确解析响应内容。
以下是一些关于编码格式的详解和示例 自动识别编码 默认情况下requests库会根据响应头中的Content-Type字段来尝试自动识别响应的编码格式。例如如果Content-Type中包含charsetutf-8requests会使用UTF-8编码来解码响应内容。 手动设置编码 如果自动识别的编码不正确您可以手动设置编码来解决乱码问题。通过将response.encoding设置为适当的编码可以确保正确解码响应内容。
下面是一个示例演示了如何手动设置编码格式以正确解析响应内容
import requests# 发送GET请求获取网页内容
url https://www.baidu.com # 替换为您要访问的网页URL
response requests.get(url)
response.encoding utf-8 # 手动设置编码为UTF-8# 输出响应内容
print(response.text)4.5 requests高级操作-文件上传 requests库允许您发送文件上传请求即将文件作为请求的一部分发送到服务器。这在与包含文件上传功能的API进行交互时非常有用。 要发送文件上传请求您可以使用requests.post()方法并通过files参数传递要上传的文件。files参数应该是一个字典其中键是字段名称值是文件对象。文件对象可以通过open()函数来创建。 以下是一个简单的文件上传示例假设您要将一个本地文件上传到服务器
import requests# 目标URL和文件路径
url https://www.example.com/upload # 替换为实际的上传URL
file_path path/to/your/file.txt # 替换为实际的文件路径# 创建文件对象
with open(file_path, rb) as file:files {file: file} # file是字段名称可以根据实际情况更改# 发送文件上传请求response requests.post(url, filesfiles)# 输出响应内容
print(response.text)在这个示例中我们使用open()函数以二进制模式打开文件然后将文件对象传递给files参数。在files字典中键是服务器期望接收的字段名称值是文件对象。您需要将file替换为实际字段名称。 请注意实际的服务器可能需要其他额外的字段或参数如身份验证、令牌等。您需要根据实际情况调整代码。 4.6 requests高级操作-获取cookie 在requests库中您可以通过response.cookies属性来获取从服务器接收的Cookie信息。Cookies是服务器在HTTP响应头中设置的一些键值对用于在客户端和服务器之间存储状态信息。以下是获取Cookie的详细说明和示例
import requests# 发送GET请求获取网页内容
url https://www.example.com # 替换为您要访问的网页URL
response requests.get(url)# 获取响应中的Cookie信息
cookies response.cookies# 打印Cookie信息
for cookie in cookies:print(Name:, cookie.name)print(Value:, cookie.value)在这个示例中我们使用requests.get()方法发送GET请求并通过response.cookies属性来获取响应中的Cookie信息。response.cookies返回一个RequestsCookieJar对象您可以通过遍历它来获取每个Cookie的名称和值。 请注意响应中可能会包含多个Cookie每个Cookie都是一个键值对。您可以根据实际需求进一步处理这些Cookie信息如存储到会话中、发送到下一个请求中等。 此外如果您想手动设置Cookie并在后续请求中使用它们可以通过在请求头部中添加Cookie字段来实现。例如
import requests# 设置Cookie
cookies {cookie_name: cookie_value}# 发送GET请求并添加Cookie到请求头部
url https://www.example.com # 替换为您要访问的网页URL
response requests.get(url, cookiescookies)# 处理响应...在这个示例中我们使用cookies参数将要发送的Cookie信息添加到请求中。这对于需要手动处理Cookie的情况非常有用。 4.7 request高级操作-证书验证
在requests库中您可以通过verify参数来控制是否对SSL证书进行验证。SSL证书验证是用于确保与服务器建立安全的加密连接的过程。默认情况下requests库会验证SSL证书但您可以通过设置verify参数来禁用验证或提供自定义证书。
以下是关于证书验证的详细说明和示例 默认验证 默认情况下requests库会验证SSL证书。这是安全的做法确保与服务器之间的通信是加密的。例如
import requests# 发送GET请求
url https://www.example.com # 替换为您要访问的网页URL
response requests.get(url)# 处理响应...禁用验证 在某些情况下您可能想要禁用证书验证例如访问自签名证书的服务器。您可以通过将verify参数设置为False来禁用验证
import requests# 发送GET请求并禁用证书验证
url https://www.example.com # 替换为您要访问的网页URL
response requests.get(url, verifyFalse)# 处理响应...请注意禁用证书验证会降低安全性仅在了解风险的情况下使用。
自定义证书 如果需要连接到使用自定义证书的服务器您可以提供证书文件的路径作为verify参数的值
import requests# 发送GET请求并使用自定义证书进行验证
url https://www.example.com # 替换为您要访问的网页URL
response requests.get(url, verify/path/to/custom/certificate.pem)# 处理响应...在这个示例中/path/to/custom/certificate.pem是您的自定义证书文件的路径。 请注意为了保护您的数据安全建议在实际应用中保持证书验证的开启状态。如果您需要在特定情况下禁用或自定义证书验证请确保您理解可能的安全风险并采取适当的措施。 5 实战
利用requests 库抓取2023年高考新闻的标题和链接
import requests
from bs4 import BeautifulSoup
import timedef fetch_news_by_page(page_number):keyword 2023年高考录取results_per_page 10pn (page_number - 1) * results_per_page# 构造搜索的URL包括搜索关键词和分页参数url fhttps://www.baidu.com/s?wd{keyword}pn{pn}# 添加头部信息模拟浏览器请求headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36,Referer: https://www.baidu.com/}# 发送请求response requests.get(url, headersheaders)# 如果请求成功if response.status_code 200:# 解析网页内容soup BeautifulSoup(response.text, html.parser)news_list []# 找到所有的新闻标题和链接for news in soup.find_all(div, class_result):title_elem news.find(h3, class_t)title title_elem.get_text() if title_elem else Nonelink_elem news.find(a)link link_elem[href] if link_elem and href in link_elem.attrs else Noneif title and link:news_list.append({title: title, link: link})return news_listelse:print(请求失败状态码, response.status_code)return Noneif __name__ __main__:for page in range(1, 4): # 输出前三页print(f第{page}页的搜索结果)news fetch_news_by_page(page)if news:for idx, item in enumerate(news, start1):print(f{idx}. {item[title]})print(f Link: {item[link]})print( * 50)else:print(没有搜索结果。)time.sleep(2) # 添加延时模拟人类浏览行为输出如下 这段代码是一个Python网络爬虫用于从百度搜索引擎中抓取关于2023年高考录取的新闻标题和链接。 首先它导入了requests库用于发送HTTP请求、BeautifulSoup库用于解析HTML文档和time库用于暂停程序执行。 首先它定义了一个函数fetch_news_by_page()这个函数接受一个参数page_number表示要抓取的页数。 在函数内部首先定义了搜索关键词2023年高考录取和每页显示的结果数量results_per_page。 然后构造了百度搜索的URL包括搜索关键词和分页参数。这里使用了f-string格式化字符串将page_number和results_per_page插入到URL中。 接着定义了一个headers字典其中包含了User-Agent和Referer两个字段用于模拟浏览器发送请求。 使用requests.get()函数发送GET请求将headers字典作为参数传入。 如果请求成功即HTTP状态码为200则使用BeautifulSoup解析返回的HTML文档。 在解析后的HTML文档中找到所有的新闻标题和链接。这里使用了find_all()函数查找所有class为result的div元素然后在每个div元素中查找h3标签class为t和a标签。 如果找到了标题和链接就添加到news_list列表中。 最后如果请求失败就打印出失败的状态码并返回None。 在主程序中调用fetch_news_by_page()函数遍历前三页的搜索结果并打印出来。为了避免频繁的网络请求每次打印结果后都暂停了2秒。 上一篇
【100天精通python】Day41python网络爬虫开发_爬虫基础入门_LeapMay的博客-CSDN博客网络爬虫Web Crawler是一种自动化程序用于在互联网上浏览和抓取信息。爬虫可以遍历网页收集数据提取信息以便于进一步处理和分析。网络爬虫在搜索引擎、数据采集、信息监测等领域发挥着重要作用。1.1 工作原理初始URL选择 爬虫从一个或多个初始URL开始这些URL通常是你希望开始爬取的网站的主页或其他页面。发送HTTP请求 对于每个初始URL爬虫会发送HTTP请求以获取网页内容。https://blog.csdn.net/qq_35831906/article/details/132377113?spm1001.2014.3001.5502