当前位置: 首页 > news >正文

找人做购物网站河北省建设信息中心网站

找人做购物网站,河北省建设信息中心网站,上海网站推广行业需求,wordpress百度不收录目录 一、页面结构的介绍  1.学习目标  2.为什么要了解页面#xff08;html#xff09;  3. html中的标签#xff08;仅介绍了含表格、无序列表、有序列表、超链接#xff09;  4.本节的演示 二、Urllib  1.什么是互联网爬虫#xff1f;  2.爬虫核心  3.爬虫… 目录 一、页面结构的介绍  1.学习目标  2.为什么要了解页面html  3. html中的标签仅介绍了含表格、无序列表、有序列表、超链接  4.本节的演示 二、Urllib  1.什么是互联网爬虫  2.爬虫核心  3.爬虫的用途  4.爬虫的分类通用爬虫、聚焦爬虫  5.反爬手段  6.urllib库使用  7.获取百度的页面源码的演示  8. urllib的1个类型和6个方法的演示  1数据类型是HTTPResponse  2read()方法  3readline()方法与readlines()  4返回状态码getcode()  5返回url地址geturl()  6获取状态信息getheaders()   9. urllib_下载下载网页、图片与视频的演示  10.请求对象的定制  1url的组成  2User Agent的引入  2User Agent简称UA介绍  3代码演示   11.编解码  1编码的由来  2get请求的quote方法  3get请求的quote方法的演示  4get请求的urlencode方法  5get请求的urlencode方法的演示  6寻找爬虫的请求地址的示例以百度翻译翻译单词为例  7post请求百度翻译的演示  8post请求百度翻译之详细翻译的演示出现反爬的第二种手段Cookie   12. ajax的get请求  1ajax的get请求豆瓣电影第一页  2ajax的get请求豆瓣电影前十页   13. ajax的post请求  14.爬虫常见的两个异常URLError\HTTPError  1简介  2代码演示   15.微博的cookie登陆  16.Handler处理器的基本使用  1为什么要学习handler  2代码演示handler的语法参考演示的代码   17.代理  1代理的作用以及步骤  2代码演示   18.代理池 说明该文章是学习 尚硅谷在B站上分享的视频 Python爬虫教程小白零基础速通的 p51-104而记录的笔记笔记来源于本人关于python基础可以去CSDN上阅读本人学习黑马程序员的笔记。 若有侵权请联系本人删除。笔记难免可能出现错误或笔误若读者发现笔记有错误欢迎在评论里批评指正。 一、页面结构的介绍 1.学习目标 1简单了解html的基础语法。 2.为什么要了解页面html 如图比如打开京东的页面如果对京东售卖物品的分类感兴趣想要爬取左侧信息。右键打开检查。   之后可以看到该网页的html代码我们需要它的标签结构后才能针对需要的汉字进行爬取。 3. html中的标签仅介绍了含表格、无序列表、有序列表、超链接 HTML是超文本标记语言HyperText Markup Language的缩写是一种用于创建网页结构和内容的标记语言。它是构建和呈现网页的基本语言用于描述网页的结构包括文本、图像、链接、多媒体等元素的布局和排版。 4.本节的演示 如下图所示打开软件创建一个包含名为“爬虫的学习尚硅谷”文件夹的项目然后创建文件“051_页面结构的介绍.html”。   编写代码后直接点击浏览器查看对应效果。代码如下可参考注释进行理解。 !DOCTYPE html html langenheadmeta charsetUTF-8 !-- 字符编码格式为UTF-8 --title标题/title !-- html的标题名 --/headbody!-- # 表格属性为宽度width200px 高度height20px 边框border1px--table width200px height20px border1pxtr !-- 行 --td !-- 列 --姓名 !-- 第1列第1行为为“姓名” --/tdtd年龄/tdtd性别/td/trtrtd张三/tdtd18/tdtd男/td/tr/table!-- ul li 无序列表 爬虫的使用场景非常之多 --ulli铁锅炖大鹅/li !-- 出现一点 铁锅炖大鹅 --li小鸡炖蘑菇/lili锅包肉/li/ul!-- ol li 有序列表 --ol !-- 早起步骤--li穿上衣服/lili下床/lili洗漱/li/ol!-- a 超链接“”中填写域名对应网址中填写超链接的名字 --a hrefhttp://www.atguigu.com/尚硅谷/a/body/html二、Urllib 1.什么是互联网爬虫 如果我们把互联网比作一张大的蜘蛛网那一台计算机上的数据便是蜘蛛网上的一个猎物而爬虫程序就是一只小蜘蛛沿着蜘蛛网抓取自己想要的数据。 解释1通过一个程序根据Url(如http:/www.taobao.com)进行爬取网页获取有用信息 解释2:使用程序模拟浏览器去向服务器发送请求获取响应信息 2.爬虫核心 1.爬取网页爬取整个网页包含了网页中所有的内容 2.解析数据将网页中得到的数据进行解析 3.难点爬虫和反爬虫之间的博弈 3.爬虫的用途 4.爬虫的分类通用爬虫、聚焦爬虫 5.反爬手段 6.urllib库使用 7.获取百度的页面源码的演示 本次将以获取百度的页面源码为例进行演示。首先如下图查看百度的页面源代码知道待会需要获取的内容。然后从其中的html代码中找到编码格式即html中的charset的值。   先打开软件创建一个名为“053_urllib的基本使用”的py文件。   编写代码并运行。代码如下可参考注释进行理解。然后将鼠标的光标放到运行结果上使用搜索快捷键CtrF,可以搜索到“百度”。 使用urllib来获取百度首页的源码 import urllib.request# 1.定义一个url,即要访问的地址 url http://www.baidu.com# 2.模拟浏览器向服务器发送请求即使用urlopen模拟浏览器打开网址 # --- 服务器收到请求后会进行反馈,包含状态码、页内源码、URL地址等等 response urllib.request.urlopen(url)# 3.获取响应中的页面的源码 # read方法 返回的是字节形式的二进制数据 ————数据为b....的形式 # 需要将二进制的数据转换成字符串 # 解码 (二进制 --- 字符串) decode(编码格式) 编码格式对应于html中的charset的值 content response.read().decode(UTF-8)# 4.打印数据 print(content) 8. urllib的1个类型和6个方法的演示 1数据类型是HTTPResponse 创建一个名为“054_urllib的1个类型和6个方法”的py文件。   首先如下编写代码发现传回的数据类型是HTTPResponse需要记住。 urllib的1个类型和6个方法的演示import urllib.requesturl http://www.baidu.com# 模拟浏览器向服务器发送请求 response urllib.request.urlopen(url)# 一个类型和六个方法 # response是HTTPResponse的类型 print(type(response)) 2read()方法 read()方法是按照一字节一字节的方式读取数据故效率不是很高如下编写代码并运行。 urllib的1个类型和6个方法的演示import urllib.requesturl http://www.baidu.com# 模拟浏览器向服务器发送请求 response urllib.request.urlopen(url)# 一个类型和六个方法 # response是HTTPResponse的类型 # # - 1个类型 # print(type(response))# - 6个方法 # 按照一字节一字节的方式读取数据 content response.read() print(content) 如下图所示仅仅在方法read()里面加一个数字“5”可以达到仅读取5个字节的效果。 3readline()方法与readlines() readline()方法仅仅只读取一行如下编程并运行。 urllib的1个类型和6个方法的演示import urllib.requesturl http://www.baidu.com# 模拟浏览器向服务器发送请求 response urllib.request.urlopen(url)# 一个类型和六个方法 # response是HTTPResponse的类型 # # - 1个类型 # print(type(response))# - 6个方法# # 按照一字节一字节的方式读取数据 # content response.read() # print(content)# # 返回5个字节 # content response.read(5) # print(content)# 仅读取一行 content response.readline() print(content) readlines()方法按行读完如下编程并运行。 urllib的1个类型和6个方法的演示import urllib.requesturl http://www.baidu.com# 模拟浏览器向服务器发送请求 response urllib.request.urlopen(url)# 一个类型和六个方法 # response是HTTPResponse的类型 # # - 1个类型 # print(type(response))# - 6个方法# # 按照一字节一字节的方式读取数据 # content response.read() # print(content)# # 返回5个字节 # content response.read(5) # print(content)# # 仅读取一行 # content response.readline() # print(content)# 按行读完 content response.readlines() print(content) 4返回状态码getcode() 返回的状态码如果是200则证明逻辑没有错如果返回404等逻辑就有错。如下编程并运行。 urllib的1个类型和6个方法的演示import urllib.requesturl http://www.baidu.com# 模拟浏览器向服务器发送请求 response urllib.request.urlopen(url)# 一个类型和六个方法 # response是HTTPResponse的类型 # # - 1个类型 # print(type(response))# - 6个方法# 返回状态码 print(response.getcode()) 5返回url地址geturl() 如下编程并运行。 urllib的1个类型和6个方法的演示import urllib.requesturl http://www.baidu.com# 模拟浏览器向服务器发送请求 response urllib.request.urlopen(url)# 一个类型和六个方法 # response是HTTPResponse的类型 # # - 1个类型 # print(type(response))# - 6个方法# 返回url地址 print(response.geturl()) 6获取状态信息getheaders() 如下编程并运行。 urllib的1个类型和6个方法的演示import urllib.requesturl http://www.baidu.com# 模拟浏览器向服务器发送请求 response urllib.request.urlopen(url)# 一个类型和六个方法 # response是HTTPResponse的类型 # # - 1个类型 # print(type(response))# - 6个方法# 获取状态信息 print(response.getheaders()) 9. urllib_下载下载网页、图片与视频的演示 创建一个名为“055_urllib_下载”的py文件。   首先如下图所示编写代码来下载一个网页。 urllib_下载的演示import urllib.request# 下载网页 url_page http://www.baidu.com urllib.request.urlretrieve(urlurl_page,filename百度.html) # 两个参数 url:网址下载路径;filename:文件名 对于图片比如搜一搜汉服把喜欢的图片的链接通过右键、点击“复制图像链接”复制下来放到PyCharm中然后进行编程并运行。 urllib_下载的演示import urllib.request# 下载网页 # url_page http://www.baidu.com # urllib.request.urlretrieve(urlurl_page, filename百度.html) # 两个参数 url:网址下载路径;filename:文件名# 下载图片 url_img https://tse2-mm.cn.bing.net/th/id/OIP-C.k_bHY2iwL4tU5aT-NTZZ0wHaK_?w182h270c7r0o5dpr1.5pid1.7 urllib.request.urlretrieve(url_img, 汉服.png) 对于视频找到一个能爬的网址为“https://haokan.baidu.com/v?vid15872748450455265454”好多目前爬不了然右键点击检查再点击箭头并点击需要锁定的视频处再在一串代码中找到vedio后src内的视频网址双击视频网址后再复制。将该网址放到PyCharm中然后进行编程并运行。视频文件录成jif太大只能来点图 urllib_下载的演示import urllib.request# 下载网页 # url_page http://www.baidu.com # urllib.request.urlretrieve(urlurl_page, filename百度.html) # 两个参数 url:网址下载路径;filename:文件名# 下载图片 # url_img https://tse2-mm.cn.bing.net/th/id/OIP-C.k_bHY2iwL4tU5aT-NTZZ0wHaK_?w182h270c7r0o5dpr1.5pid1.7 # urllib.request.urlretrieve(url_img, 汉服.png)# 下载视频 url_vedio https://vd3.bdstatic.com/mda-pfkn5iha3dssefej/1080p/cae_h264/1687362569032960204/mda-pfkn5iha3dssefej.mp4?v_from_shkapp-haokan-hbeauth_key1690033157-0-0-2d1b3f972dbbf20fc58570f68a0feff9bcevod_channelsearchbox_feedcr3cd0pd1pt3logid2357674890vid15872748450455265454abtest111611_3klogid2357674890 urllib.request.urlretrieve(url_vedio, 视频.mp4) 10.请求对象的定制 1url的组成 注:上图所示的网址的前部分粘贴到其他地方后有所变化这是由于编码的不同导致的粘贴到Visio后的编码是Unicode编码。另外保留wd值前面的内容后网页照样正常使用说明wd后面的内容可能是广告等。 2User Agent的引入 如图之所以爬取的信息比较少是因为给的信息不够导致遇到了反爬。产生这种反爬现象的原因就是缺少User Agent。 2User Agent简称UA介绍 因此需要伪装一下可以去网上查一下UA选择需要的UA。或者如下图查询并使用自己的UA。 3代码演示 先打开软件创建一个名为“056_请求对象的定制”的py文件。   如下编写代码后也能获取网页为“https”开头的url的页面源代码了。 import urllib.requesturl https://www.baidu.com 因为urlopen方法中不能存储字典导致headers不能传递进去所以需要请求对象的定制# 请求对象定制 headers {User-Agent: ozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Hot Lingo 2.0)} request urllib.request.Request(urlurl, headersheaders) # 此处需关键字传参response urllib.request.urlopen(request) content response.read().decode(UTF-8) print(content) 11.编解码 1编码的由来 注a的ASCII码为97A为650为48。 2get请求的quote方法 首先看看get请求在浏览器的代码检查中的位置。   对于get请求的quote方法它能将汉字等字符转成Unicode编码代码示例如下。 import urllib.parse print(urllib.parse.quote(‘周杰伦’)) 3get请求的quote方法的演示 先打开软件创建一个名为“057_get请求的quote方法”的py文件。   如下图本次的需求是获取此网页即“https://cn.bing.com/search?q周杰伦”的页面源码。   由于网址中存在汉字需要将其中的汉字转变成Unicode编码如下图进行编码并运行确认转换的网址没有问题。 需求 获取“https://cn.bing.com/search?q周杰伦”的网页源码 # https://cn.bing.com/search?q%E5%91%A8%E6%9D%B0%E4%BC%A6import urllib.request import urllib.parse# url https://cn.bing.com/search?q周杰伦 url https://cn.bing.com/search?qurl需将汉字转变成Unicode编码这是因为ASCII码中没有“周杰伦”这三个字需要使用urllib.parse下的quote方法url urllib.parse.quote(周杰伦) print(url) 继续编写代码即可得到该网址的页面源码。 需求 获取“https://cn.bing.com/search?q周杰伦”的网页源码 # https://cn.bing.com/search?q%E5%91%A8%E6%9D%B0%E4%BC%A6import urllib.request import urllib.parse# url https://cn.bing.com/search?q周杰伦 url https://cn.bing.com/search?qurl需将汉字转变成Unicode编码这是因为ASCII码中没有“周杰伦”这三个字需要使用urllib.parse下的quote方法url urllib.parse.quote(周杰伦) # print(url) # 测试语句# 请求对象定制使用UA解决反爬的第一种手段 headers {User-Agent: ozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Hot Lingo 2.0) } request urllib.request.Request(urlurl, headersheaders)# 模拟浏览器向服务器发送请求 response urllib.request.urlopen(request)# 获取响应的内容 content response.read().decode(UTF-8)print(content) 4get请求的urlencode方法 对于get请求的quote方法它只能将一个词转为Unicode编码。当一个网址中出现了多处为汉字的时候比如“https://cn.bing.com/search?q周杰伦sex男”该方法使用起来很不方便。   get请求的urlencode方法的应用场景和语法如下图所示。 5get请求的urlencode方法的演示 先打开软件创建一个名为“058_get请求的urlencode方法”的py文件。本次需要获取“https://cn.bing.com/search?q周杰伦sex男location中国台湾省”的网页源码。   由于网址中存在汉字需要将其中的汉字转变成Unicode编码如下图进行编码并运行确认转换的网址没有问题。 get请求的urlencode方法的演示 - 获取下面网址的页面源码https://cn.bing.com/search?q周杰伦sex男location中国台湾省 import urllib.request import urllib.parse# 请求资源路径 base_url https://cn.bing.com/search? data {q: 周杰伦,sex: 男,location: 中国台湾省 } new_data urllib.parse.urlencode(data) url base_url new_data print(url) # 测试代码 继续编写代码即可得到该网址的页面源码。 get请求的urlencode方法的演示 - 获取下面网址的页面源码https://cn.bing.com/search?q周杰伦sex男location中国台湾省 import urllib.request import urllib.parse# 请求资源路径 base_url https://cn.bing.com/search? data {q: 周杰伦,sex: 男,location: 中国台湾省 } new_data urllib.parse.urlencode(data) url base_url new_data # print(url) # 测试代码# 请求对象定制使用UA解决反爬的第一种手段 headers {User-Agent: ozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Hot Lingo 2.0) } request urllib.request.Request(urlurl, headersheaders)# 模拟服务器发送请求 response urllib.request.urlopen(request)# 获取网页源码的数据 content response.read().decode(UTF-8)print(content) 6寻找爬虫的请求地址的示例以百度翻译翻译单词为例 如下图在百度翻译页面中打开检查里的网络输入“spider”时可以在网络里看到很多次请求组成新的页面在这一堆请求中哪些才是我们想要的数据呢才是翻译的接口该如何寻找呢   显然图片格式“jpg”、“png”都不是找其他的对应的负载然后再慢慢观察。最后发现sug文件记录了输入的“spider”。   然后点击预览进而验证这就是我们需要的数据找到我们想要的接口显示“spider”的sug请求。   那么怎么通过爬虫程序获取到这个数据呢查看该sug标头里面的信息可以知道它的请求地址为“https://fanyi.baidu.com/sug”请求方式为“POST”。在负载中发现它的请求参数为“spider”。   参数寻找完毕。需要注意的是后面在编程时post请求的参数在转变成Unicode字符后还需要进行“UTF-8”的编码post参数是不能直接拼接在url即请求地址后面的而是需要放在请求对象定制的参数中这一点与get请求不同。 7post请求百度翻译的演示 先打开软件创建一个名为“059_post请求百度翻译”的py文件。   如下进行编程并运行发现获取的数据的格式为json。 post请求百度翻译的演示 import urllib.request import urllib.parse# 请求地址 - 从百度翻译的检查的网络里直接复制过来 url https://fanyi.baidu.com/sug # post请求的参数 必须要进行编码 data {kw: spider } data urllib.parse.urlencode(data).encode(UTF-8)# 请求对象定制使用UA解决反爬的第一种手段。 # Request还可以将参数和请求地址产生一种联系 # 注post参数是不会直接拼接在url即请求地址后面的而是需要放在请求对象定制的参数中。 headers {User-Agent: ozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Hot Lingo 2.0) } request urllib.request.Request(urlurl, datadata, headersheaders)# 模拟浏览器向服务器发送请求 response urllib.request.urlopen(request)# 获取响应的数据 content response.read().decode(UTF-8)print(content) # 测试代码 print(type(content)) 继续编程并运行。 post请求百度翻译的演示 import urllib.request import urllib.parse import json# 请求地址 - 从百度翻译的检查的网络里直接复制过来 url https://fanyi.baidu.com/sug # post请求的参数 必须要进行编码 data {kw: spider } data urllib.parse.urlencode(data).encode(UTF-8)# 请求对象定制使用UA解决反爬的第一种手段。 # Request还可以将参数和请求地址产生一种联系 # 注post参数是不会直接拼接在url即请求地址后面的而是需要放在请求对象定制的参数中。 headers {User-Agent: ozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Hot Lingo 2.0) } request urllib.request.Request(urlurl, datadata, headersheaders)# 模拟浏览器向服务器发送请求 response urllib.request.urlopen(request)# 获取响应的数据 content response.read().decode(UTF-8)print(content) # 测试代码 print(type(content))# 将json字符串转为python中的json对象这样就能显示其中的中文了 obj json.loads(content) print(obj) 8post请求百度翻译之详细翻译的演示出现反爬的第二种手段Cookie 在百度翻译中还有一个以“v2trans”开头的详细翻译的接口同样的可以去它的请求地址、请求方法与请求参数发现请求参数变多了。本次将演示详细翻译的数据爬取目的是将再次熟悉百度翻译的post请求以及认识一个新的反爬手段。   打开软件创建一个名为“060_post请求百度翻译之详细翻译”的py文件。   输入下列代码后运行会出现未知错误这是因为未向服务器说明自己的请求标头的信息第二个反爬手段。 post请求百度翻译之详细翻译的演示import urllib.request import urllib.parse import json# 先将接口地址复制过来 url https://fanyi.baidu.com/v2transapi?fromentozh # 参数 data {from: en,to: zh,query: spider,transtype: realtime,simple_means_flag: 3,sign: 63766.268839,token: 9f53213d7ab95e5ac27fd0c681269057,domain: common,ts: 1690240111733 } # post请求的参数必须要进行编码(调用encode编码) data urllib.parse.urlencode(data).encode(UTF-8) # 请求头 headers {User-Agent: ozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Hot Lingo 2.0) } # 请求对象定制使用UA解决反爬的第一种手段。 request urllib.request.Request(urlurl, datadata, headersheaders)# 模拟浏览器向服务器发送请求 response urllib.request.urlopen(request)# 获取响应的数据 content response.read().decode(UTF-8)print(content) # 测试代码 print(type(content))# 将json字符串转为python中的json对象这样就能显示其中的中文了 obj json.loads(content) print(obj) 于是将请求标头复制到代码中并注释一行发现能有结果。然后再在标头里慢慢注释发现仅需要“Cookie”就能得到我们想要的结果。 12. ajax的get请求 本次将以第一个案例熟悉本次演示需要熟悉的网页用第二个案例介绍ajax的get请求。 1ajax的get请求豆瓣电影第一页 如下图所示打开豆瓣网站https://movie.douban.com/选择排行榜选择想要关注的电影类型比如“动作”。   如下图打开检查里的网络再刷新一下网页。现在需要思考哪一个接口才是我们需要找的   然后一个一个接口不断寻找找到后发现接口如下图所示而且每页是20个电影。   然后点击标头发现这是一个get请求。   打开软件创建一个名为“061_ajax的get请求豆瓣电影第一页”的py文件。   将刚刚所找到的接口的请求地址复制到PyCharm中然后再进行编程并运行。 获取豆瓣电影的第一页的数据并且保存起来 - get请求import urllib.request import jsonurl https://movie.douban.com/j/chart/top_list?type5interval_id100%3A90actionstart0limit20 headers {User-Agent: ozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Hot Lingo 2.0) }# 1.请求对象定制使用UA解决反爬的第一种手段 request urllib.request.Request(urlurl, headersheaders) # 2.模拟浏览器向服务器发送请求 response urllib.request.urlopen(request) # 3.获取响应的数据 content response.read().decode(UTF-8) # 4.处理数据(本人加的只获取感兴趣的内容。 如果有不懂的可以去阅读本人的CSDN上的python入门中有关json的部分。) # 假设本次只想储存序号和电影名字 content json.loads(content) content_changed [] for index in content:content_changed.append({rank: index[rank], title: index[title]})content_changed json.dumps(content_changed,ensure_asciiFalse) # ensure_asciiFalse表示不用转换成ASCII码 如果为了节省空间请不要写ensure_asciiFalse # 5.数据下载到本地 open方法默认情况下使用的是gbk的编码- 如果我们要想保存汉字那么需要在open方法中指定编码格式为utf-8# 法1 # fp open(douban.json, w, encodingUTF-8) # fp.write(content) # fp.close() # 别忘了关闭文件# 法2 with open(douban.json, w, encodingutf-8) as fp:fp.write(content_changed) 2ajax的get请求豆瓣电影前十页 如图所示豆瓣排行榜的动作电影不止一页鼠标滚轮向下滚动会发现随着页面的向下它会不断地向下加载。这个操作的后端使用的是ajax。如何拿到前十页的数据是本次的关键。   打开软件创建一个名为“062_ajax的get请求豆瓣电影前十页”的py文件。   先将第一页的数据的请求地址复制到PyCharm中。   然后如下图所示然后点击清空已有请求的按钮。接着将网页向下滑。找到对应地址并复制到PyCharm中。   同理找到第三页的地址并复制到PyCharm中。然后观察这几个地址发现它们仅仅是“start”的值依次为0、20、40、60…对应第1、2、3、…页其他均没有变化。   删去上次运行的结果即删去文件“douban.json”。   然后如下进行编程并运行。在运行程序后产生的文件中使用快捷键CtrAltL,一以便查看文件里的内容。运行程序时间有点长说明程序有待优化。 获取豆瓣电影的前十页的数据并且保存起来 - get请求# 第一页 # https://movie.douban.com/j/chart/top_list?type5interval_id100%3A90actionstart0limit20 # 第二页 # https://movie.douban.com/j/chart/top_list?type5interval_id100%3A90actionstart20limit20 # 第三页 # https://movie.douban.com/j/chart/top_list?type5interval_id100%3A90actionstart40limit20# page 1 2 3 4 # start 0 20 40 60 规律为( page - 1 ) * 20import urllib.request import json import urllib.parsedef create_request(page: int):请求对象定制使用UA解决反爬的第一种手段:param page: 页码:return: 请求对象定制的结果request# 请求地址base_url https://movie.douban.com/j/chart/top_list?type5interval_id100%3A90actiondata {start: (page - 1) * 20,limit: 20}data urllib.parse.urlencode(data)url base_url data# 请求头headers {User-Agent: ozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Hot Lingo 2.0)}request urllib.request.Request(urlurl, headersheaders)return requestdef get_content(request):获取page页数据:param request: 请求对象定制的结果:return: 第page页数据# (1).模拟浏览器向服务器发送请求response urllib.request.urlopen(request)# (2).获取响应的数据content response.read().decode(UTF-8)return contentdef deal_content(content, content_changed):处理page页数据,假设本次只想储存序号和电影名字:param content: 从豆瓣上获取的某一页的原始数据:param content_changed: 根据需要修改后只含序号和电影名字的数据:return: 返回处理原始数据后的只含序号和电影名字的数据content json.loads(content) # json字符串转成python中的json对象for index in content:content_changed.append({rank: index[rank], title: index[title]})return content_changeddef down_load(content_changed):数据下载到本地:param content_changed: 处理过后的数据:return: 无返回值# 将数据转为json类型content_changed json.dumps(content_changed, ensure_asciiFalse)# ensure_asciiFalse表示不用转换成ASCII码 如果为了节省空间请不要写ensure_asciiFalseopen方法默认情况下使用的是gbk的编码- 如果我们要想保存汉字那么需要在open方法中指定编码格式为utf-8# 法1# fp open(douban.json, w, encodingUTF-8)# fp.write(content)# fp.close() # 别忘了关闭文件# 法2with open(douban.json, w, encodingutf-8) as fp:fp.write(content_changed)# 程序的入口 if __name__ __main__:# 1.输入起始、结束页码start_page int(input(请输入起始的页码))end_page int(input(请输入结束的页码))# 2.从豆瓣上获取对应数据content_changed []for page in range(start_page, end_page 1):# 2.1 第page页的请求对象定制request create_request(page)# 2.2 获取page页数据content get_content(request)# 2.3 处理page页数据(本人加的只获取感兴趣的内容。 如果有不懂的可以去阅读本人的CSDN上的python入门中有关json的部分。)# 假设本次只想储存序号和电影名字content_changed deal_content(content, content_changed)# 3.数据下载到本地down_load(content_changed) 13. ajax的post请求 本次将以爬取肯德基的一些信息为例介绍ajax的post请求具体为北京哪些位置有肯德基爬取前10页就可以了。如下图在百度上搜索“肯德基”点进去后点击“餐厅查询”将城市选为“北京”。   然后点击检查里的网络选择第1页发现有一个接口是我们需要的数据。   为什么说它是ajax请求呢这是因为出现了“X-Requested-With:XMLHttpRequest”另外本次的请求是ajax的post请求。   打开软件创建一个名为“063_ ajax的post请求肯德基官网”的py文件。   将第1页的请求地址以及负载里的表单信息复制到PyCharm中同理将第2页、第3页的请求地址以及负载里的表单信息复制到PyCharm中。   观察这几页信息的规律发现只有“pageIndex”的值不同依次为1、2、3。   之后如下进行编程并运行在查看生成的json文件时使用快捷键CtrAltL有助于浏览结果。 北京哪些位置有肯德基?爬取前10页数据。 - post请求# 第一页 # http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?opcname # cname: 北京 # pid: # pageIndex: 1 # pageSize: 10 # 第二页 # http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?opcname # cname: 北京 # pid: # pageIndex: 2 # pageSize: 10 # 第三页 # http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?opcname # cname: 北京 # pid: # pageIndex: 3 # pageSize: 10import urllib.request import urllib.parse import jsondef crate_request(page: int):请求对象定制:param page: 页码:return: 某一页的请求对象定制base_url http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?opcnamedata {cname: 北京,pid: ,pageIndex: str(page),pageSize: 10}# post的参数需要编码data urllib.parse.urlencode(data).encode(UTF-8)headers {User-Agent: ozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Hot Lingo 2.0)}return urllib.request.Request(urlbase_url, datadata, headersheaders)def get_content(request):获取网页源码:param request: 请求对象定制的结果:return: 网页源码response urllib.request.urlopen(request)content response.read().decode(UTF-8)content json.loads(content)return contentdef down_load(all_content):fp open(kfc.json, w, encodingUTF-8)all_content json.dumps(all_content, ensure_asciiFalse)fp.write(all_content)fp.close()if __name__ __main__:start_page int(input(请输入起始页码))end_page int(input(请输入结束页码))all_content []for page in range(start_page, end_page 1):# 请求对象定制request crate_request(page)# 获取网页源码content get_content(request)# 将数据添加到存储所有数据的列表all_content中all_content.append(content)# 下载down_load(all_content) 14.爬虫常见的两个异常URLError\HTTPError 1简介 2代码演示 本次以捕获一个CSDN上的网页源码为例进行演示。如下图点开一个CSDN链接。为了删去一些没用的广告可以在网址中把离detail最近的那个问号以及后面的部分删除留下的链接为“https://blog.csdn.net/sulixu/article/details/119818949”。   先打开软件创建一个名为“064_爬虫的两种异常”的py文件。   如下进行编码成功获得该链接的网页源码。 import urllib.requesturlhttps://blog.csdn.net/sulixu/article/details/119818949 headers {User-Agent: ozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Hot Lingo 2.0) } # 请求对象定制 requesturllib.request.Request(urlurl,headersheaders) # 模拟浏览器向服务器发送请求 responseurllib.request.urlopen(request) # 读取数据 contentresponse.read().decode(UTF-8) print(content) 然后刻意在url后面加个“1”发现报错是一个HTTPError该错误是URLError的子类。   用户往往看不懂错误为了不让用户所以如果再出现HTTPError就显示“系统正在升级。。。”所以如下加入try…except语句。 import urllib.request import urllib.errorurlhttps://blog.csdn.net/sulixu/article/details/1198189491 headers {User-Agent: ozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Hot Lingo 2.0) } try:# 请求对象定制requesturllib.request.Request(urlurl,headersheaders)# 模拟浏览器向服务器发送请求responseurllib.request.urlopen(request)# 读取数据contentresponse.read().decode(UTF-8)print(content) except urllib.error.HTTPError:print(系统正在升级。。。) 如果出现URLError一般是主机地址的参数写错了比如将url改成“http://www.goudan1111.com”如下图所示。   同样为了不直接显示报错可以进行如下编码然后运行。 import urllib.request import urllib.error# urlhttps://blog.csdn.net/sulixu/article/details/1198189491 url http://www.goudan1111.com headers {User-Agent: ozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Hot Lingo 2.0) } try:# 请求对象定制requesturllib.request.Request(urlurl,headersheaders)# 模拟浏览器向服务器发送请求responseurllib.request.urlopen(request)# 读取数据contentresponse.read().decode(UTF-8)print(content) except urllib.error.HTTPError:print(系统正在升级。。。) except urllib.error.URLError:print(我都说了系统正在升级。。。) 15.微博的cookie登陆 对于某些需要登陆才能获取相关信息的网站上此时需要cookie绕过登陆进入某个页面后然后才能做一些信息采集。这一节需进行获取微博“https://weibo.cn/pub/”上的一些信息进行演示。   由于本次演示需要登陆微博就不再去跟着演示了。演示的代码无非是在捕获并保存页面源码的基础上修改请求头对应参数为检查-网络-info-标头-请求标头里的一堆参数。这些参数中cookie和referer起了主要作用。 微博cookie登陆的演示 - 适用的场景数据采集的时候 需要绕过登陆 然后进入到某个页面# 个人后息页面是Utf-8 但是还报错了编码错误 因为并没有进入到个人信息页面而是跳转到了登陆页面 # 那么登陆页面不是Utf-8 所以报错 # cookie中携带着你的登陆后息 如果有登陆之后的cookie 那么我们就可以携带着cookie.进入到任何页面 # referer 判断当前路径是不是由上一个路径进来的 一般情况下是做 图片防盗链 16.Handler处理器的基本使用 1为什么要学习handler 2代码演示handler的语法参考演示的代码 先打开软件创建一个名为“066_handler处理器的基本使用”的py文件。   如下进行编码通过使用handler处理器来获取百度首页的网页源码。 handler处理器的基本使用的演示 - 需求使用handler来访问百度 获取网页源码import urllib.request# 要访问的地址 url http://www.baidu.com# 请求头 headers {User-Agent: ozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Hot Lingo 2.0) }# 请求对象定制 request urllib.request.Request(urlurl, headersheaders)# handler的使用基本上需要三个单词handler、build_opener、open # (1)获取handler对象 handler urllib.request.HTTPHandler() # (2)获取opener对象 opener urllib.request.build_opener(handler) # (3)调用open方法 response opener.open(request)content response.read().decode(UTF-8) print(content) 17.代理 1代理的作用以及步骤 2代码演示 先打开软件创建一个名为“067_代理”的py文件。   如下图所示搜索“ip”将网址上带广告的部分删除然后复制到PyCharm中并把“https”改成“http”。   在下面代码的基础上加上Cookies然后运行可以得到百度搜索“ip”的网页源码。 import urllib.requesturl http://www.baidu.com/s?ieutf-8f8rsv_bp1rsv_idx1tnbaiduwdip # 请求头 headers {User-Agent: ozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Hot Lingo 2.0) } # 请求对象定制 request urllib.request.Request(urlurl, headersheaders) # 模拟浏览器访问服务器 response urllib.request.urlopen(request) # 获取响应的信息 content response.read().decode(UTF-8) # 保存 with open(代理.html, w, encodingUTF-8) as fp:fp.write(content) 如下图所示可以去“快代理”里面找一些代理ip。   如下继续编程加上代理。运行后发现需要安全验证。后面想办法去windows里设置代理ip然后得到Cookie失败了。估计免费的ip不行得买。 import urllib.requesturl http://www.baidu.com/s?ieutf-8f8rsv_bp1rsv_idx1tnbaiduwdip # 请求头 headers {User-Agent: ozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Hot Lingo 2.0) } # 请求对象定制 request urllib.request.Request(urlurl, headersheaders) # 模拟浏览器访问服务器 # response urllib.request.urlopen(request)# handler的使用基本上需要三个单词handler、build_opener、open # proxies为代理ip proxies {http: 58.20.184.187:9091 # 值为主机端口号 }handler urllib.request.ProxyHandler(proxiesproxies) # ProxyHandler有代理 opener urllib.request.build_opener(handler) response opener.open(request)# 获取响应的信息 content response.read().decode(UTF-8) # 保存 with open(代理.html, w, encodingUTF-8) as fp:fp.write(content) 18.代理池 如果高频次使用一个ip去访问一个网站这个ip很可能会被封。所以为了避免这种情况提出了代理池的概念里面有一堆高匿的ip。 先打开软件创建一个名为“068_代理池”的py文件。   如下进行编程由于个人还是不知道怎么获取对应ip的Cookie,因此进入百度还是需要安全验证。 import urllib.request import randomurl https://www.baidu.com/s?ieutf-8f8rsv_bp1rsv_idx1tnbaiduwdip # 请求头 headers {User-Agent: ozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Hot Lingo 2.0) } # 请求对象定制 request urllib.request.Request(urlurl, headersheaders) # 模拟浏览器访问服务器 # response urllib.request.urlopen(request)# handler的使用基本上需要三个单词handler、build_opener、open # proxies为代理ip proxies_pool [{http: 58.20.184.187:9091},{http: 117.68.194.137:9999} ] proxies random.choice(proxies_pool)handler urllib.request.ProxyHandler(proxiesproxies) # ProxyHandler有代理 opener urllib.request.build_opener(handler) response opener.open(request)# 获取响应的信息 content response.read().decode(UTF-8) # 保存 with open(代理池.html, w, encodingUTF-8) as fp:fp.write(content)
http://www.dnsts.com.cn/news/24900.html

相关文章:

  • 深圳企业网站制作哪个wordpress 增加注册页面
  • 做网站客户要求多很烦济南 网站设计公司
  • wix做网站步骤个人主题网站做的步骤
  • 电子平台网站加盟网站制作费用
  • 南城做网站中天钢铁 网站建设
  • 西安云众网站建设厦门网站建设培训费用
  • 红桥集团网站建设建设网站服务器怎么选
  • 深圳建筑设计平台网站专门做电路图的网站
  • 厦门网站设计大概多少钱建设库
  • 企业网站构建方案谷歌浏览器下载视频
  • lamp 网站建设论文影视app搭建教程
  • 做户外照明有哪些网站做计算机网站有哪些内容
  • 做网站月薪资多少钱上海软件培训网站建设
  • 知识付费网站搭建教程成都软件外包开发
  • 网架生产厂家来宾网站优化
  • 增塑剂网站建设企业网站建设费未付款怎样挂账
  • 做移动网站多少钱沧州网站推广优化
  • 最新企业网站系统太原网站设计开发公司
  • 企业免费网站建设aspcms免费旅游网站模板
  • 网站建设多少钱需要wordpress两个站合并
  • wordpress里面的副标题啥意思新网站如何做seo优化
  • 从江网站建设wordpress分类目录顺序
  • 竹子建站seo设置怎么做企业网站运营推广难做吗
  • 怎样接做网站的活奉贤建设机械网站
  • 网站开发主流四川建设网官网地址
  • 网站推广的10种方法电商公司有哪些?
  • 企业网站设计软件文旅部:不随意关停娱乐场所
  • 淮北建设银行官方网站微信商城开店步骤
  • 用什么开发手机网站免费下载公司宣传册设计样本
  • 网站后台教程99作文网官网