Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

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
2
3
4
5
6
from urllib.request import urlopen
url = "http://www.baidu.com"
resp = urlopen(url)
with open("mybaidu.html", mode="w", encoding ="utf-8") as f:
f.write(resp.read().decode("utf-8"))
print("over!")

用的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
2
3
4
5
6
7
8
import requests
query = input("请输入你想要搜索的内容:")
url = f'https://cn.bing.com/search?q={query}'
headers={
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36 Edg/133.0.0.0"}
resp=requests.get(url,headers=headers)
print(resp.text)

根据 “小试牛刀”环节 你可以大题理解代码内容,其中 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’)) 请检查你的网络代理是不是没关

未完待续。。。。

评论