python爬虫
提到python你首先想到的是什么呢?便捷的计算机语言、精简的算法、脱俗的语法格式…….但我首先想到的是爬虫,这也是我学习python的兴趣来源。我们平时都说Python爬虫,其实这里可能有个误解,爬虫并不是Python独有的,可以做爬虫的语言有很多例如 : PHP,JAVA,C#,C++,Python,选择Python做爬虫是因为Python相对来说比较简单,而且功能比较齐全。
第一次接触python是在高中课上,我们学习这一门语言作为计算机学习的开始,当时只觉得好麻烦好繁琐,为什么有些语句后面加”:“,为什么有些不加等等。到了现在先系统的学完c后再回头看python便有了很好打理解。
爬虫介绍
故名思意,一种爬行的虫子,只不过它不在地面载体爬而是在网络上。这条虫可以做的的事很多,例如某软件的视频vip视频无法观看,抖音上有水印的照片视频,都可以通过爬虫方式将源数据“拿下来” ,原则上,只要是浏览器(客户端)能做的事情,爬虫都能够做。当然切记不要违法乱纪!!!涉密敏感信息不要爬取 小心进局子。
爬虫准备工作
首先我们需要下载python,我下载的是官方最新的版本 3.8.3
其次我们需要一个运行Python的环境,我用的是pycharm

小试牛刀
(文章所用代码等皆在GitHub中Heavengap/pythonProject: myselfPractice)
如果你的python版本为3以下 还需安装urllib 在终端(alt+F12)中输入**pip install urllib
**
出现.venv 则说明在建立python项目时建立的虚拟环境 此时的任何库的引入在其他项目中不生效只作用于本项目中,其他项目如需使用需重新引入。
以百度网页为例(www.baidu.com) 此处http协议而不是https!https涉及三次握手更麻烦
1 | from urllib.request import urlopen |
用的python3自带的urllib库 用浏览器打开生产的mybaidu.html可看到爬到的网页网站 此类网址为整合网址,指网页数据与构建网页的框架为一体,即获取到代码中就包含网页信息
form urllib库中request一个urlopen
url为目标网页,resp为respond 得到的urlopen中的url
with open创建一个mybaide名称的html文件(html文件可以打开js编写的代码使观感更直接),mode格式为w即为write 最后如果是edge浏览器需再最后添加 encoding 编码格式为 utf-8 ,否则可能会出现乱码 声明:有些网页的编码格式不为utf-8 可通过开发者选项工具中 打开网页源代码中找到网页所用的格式(该代码所爬的代码就是网页源代码)

将with open 的整体操作as f ,f的write中读取resp并且编码模式为utf-8,不表明则为乱码,可自行实验
最后在结束段输出over!表明程序完整运行并结束。
简易网页自搜索
首先要引入库这个概念。默认的python编译器中缺少很多模块,例如c++ 中的库添加。此处用到的库为’requests’ 首次使用
打开文件终端(alt+F12) 输入 pip install requests即可
1 | import requests |
根据 “小试牛刀”环节 你可以大题理解代码内容,其中 query 相当于变量X 在url中 起变量作用,你可以在浏览器中搜索任何内容,你会发现,他们大致的网页地址均为https://www.bing.com/search?q=陈奕迅 ; https://www.baidu.com/s?wd=陈奕迅。你可能会说,后面还有一串杂乱的代码,

删除后面冗杂的部分后你会发现搜索内容并不会改变 .W<
headers为请求头部分,他的存在是必不可少的,你会发现在确实headers的现况下,一些网址会阻止你的访问,这就涉及到反爬方面的知识,而headers中的内容就像我们的居民身份证一样,没有它寸步难行。所以我们需要伪装一个,如果你仔细看headers的内容不难发现其中包括很多我们的个人信息,比如chrome的是133.0.0.0 edg浏览器为133.0.0.0 safari为537.36 window系统等等。那么如何简单获取我们的请求头呢? 可以借助浏览器自带的工具“开发者工具”(Ctrl+Shift+i)
在”网络“主分类中选择”全部“项,此时刷新页面,打开名称中第一个文件。
你会找到 User-Agent 它的内容就是我们要找的内容。别忘了在前面添加**”user-agent”:**
代码运行过程中 如果出现urllib3.exceptions.ProxyError: (‘Unable to connect to proxy’, OSError(0, ‘Error’)) 请检查你的网络代理是不是没关