Python作为当今热门的编程语言之一,其强大的自动化处理文件能力和爬虫爬取信息能力受广大工作者喜爱,其受欢迎程度已经不亚于Java、C++等语言,甚至有段时间一度超过了Java语言。此项目是基于Python语言制作的简易网页爬取器,利用Python的爬虫爬取信息的能力,模拟浏览器的搜索引擎进行词条搜索过程,并保存该词条的搜索结果页面,即html文件。
爬取搜狗指定词条对应的搜索结果页面,输入任意词条,输出与输入相对应的词条的搜索结果页面的html文件,并能成功打开此文件,实现网页爬取效果。
爬取网页信息,可以模拟浏览器的搜索引擎进行词条搜索的过程,我们平时利用浏览器的搜索引擎搜索词条,首先第一步就是打开网页,然后在对应搜索框中输入我们要搜索的词条,单击搜索,网页进行响应,最后打开一个新的搜索结果页面。我们可以利用requests库的相关指令模拟此过程。
requests是Python实现的最简单易用的HTTP库。
库中实现爬取网页信息的基本语句为
requests.get(url,garams,headers)
首先打开搜狗搜索网页,任意输入一个词条进行搜索,例如“江西”,我们会得到一个含有“江西”这个词条的所有搜索结果的页面,网页地址为https://www.sogou.com/web?query=%E6%B1%9F%E8%A5%BF&_asf=www.sogou.com&_ast=&w=01019900&p=40040100&ie=utf8&from=index-nologin&s_from=index&sut=1857&sst0=1615465461995&lkt=0%2C0%2C0&sugsuv=00B7E063B66DB3135ECE82C165D74368&sugtime=1615465461995,这么一长串的地址,那么什么是有用的呢,https://www.sogou.com/web?query=%E6%B1%9F%E8%A5%中%E6%B1%9F%E8%A5%就是我们所输入的词条“江西”,“=”前面的“query”是一个变量,在这之后的咱都可以忽略,不重要,而且变量query可以定义字典封装,将其写入字典中,在字典中input词条。
#指定url
url='https://www.sogou.com/web?'
kw=input('Enter sometings:')
#定义字典封装
param={
'query':kw
}
利用requests.get(url,garams,headers)来获取信息,并将所获取到的信息用response储存。
#发起请求
response = requests.get(url=url,params=param,headers=headers)
用response.text获取网页的HTML字符串,并将所获取的字符串储存在page_text这个变量中,定义一个变量fileName等于我们一开始输入的词条,并以“.html”后缀的形式保存。
#获取响应数据
page_text = response.text
fileName=kw+'.html'
利用“写”代码(fp.write)将之前所获取的响应数据写入html文件中,进行持久性储存。
注意:用response.text获取网页的HTML字符串,往往会出现乱码,于是我们就可以用response.encoding='utf-8’消除乱码,以保持数据完整。
#持久性储存
with open(fileName,'w',encoding='utf-8') as fp:
fp.write(page_text)
写完上述四步代码后,仍然会出现报错。为什么会这样呢?这是由于网页的一种反爬机制,UA检测。User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。一些网站常常通过判断 UA 来给不同的操作系统、不同的浏览器发送不同的页面,因此可能造成某些页面无法在某个浏览器中正常显示。说通俗易懂点吧,其实说白了就是工厂里的员工都穿着工服,如果没有穿工作服的话,保安就不认识你,也就不会让你进入。
上面提到了所谓的反爬机制——UA检测,但这种机制并不是不能破解的,在编写的爬虫当中可以通过伪装 UA 可以绕过检测,也就是我们所讲的反反爬机制——UA伪装。UA伪装就是给我们的爬虫穿上工作服,然后顺利的通过保安那一关。那么怎么给我们的爬虫穿上这个所谓的衣服呢?于是,我们就先要知道我们的User Agent到底是什么吧。
首先,打开任意一个网页,单击鼠标右键,出现如下对话框,单击"检查",然后在弹出的界面中找到“Network”,并单击“Network”,再“Win+R”刷新界面,再在“Name”中任意点击一个name,最后在右侧弹出的信息框中找到User Agent,User Agent后的信息就是我们要找的(具体操作如下所示)。
找到User Agent后,我们在代码中定义一个headers字典,将刚刚找到的User Agent信息复制粘条到headers字典中进行封装,最后在requests.get中将我们的headers写入,这样我们的爬虫就有了自己的User Agent了,这就是UA伪装。
例如:
#UA伪装
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.1071 SLBChan/23'
}
# 省略部分代码
response = requests.get(url=url,params=param,headers=headers)
运行写好的代码,在命令框中输入任意你想搜索的词条,例如“江西师范大学”,单击回车,提示“江西师范大学.html ,下载成功!”,这时我们可以在左侧project的根路径下发现“江西师范大学.html”文件,这时含有搜索结果的信息就以“html”的形式保存了下来,打开这个“江西师范大学.html”文件,访问所生成的网页,会发现它和我们用搜狗搜索引擎搜索的结果一致。
import requests
if __name__ == '__main__':
#UA伪装
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.1071 SLBChan/23'
}
#指定url
url='https://www.sogou.com/web?'
kw=input('Enter sometings:')
#定义字典封装
param={
'query':kw
}
#发起请求
response = requests.get(url=url,params=param,headers=headers)
#获取响应数据
page_text = response.text
fileName=kw+'.html'
#持久性储存
with open(fileName,'w',encoding='utf-8') as fp:
fp.write(page_text)
print(fileName,'下载成功!')
这是笔者第一次用Python编写的第一个爬虫程序,这个程序虽然只是很简单的调用了requests库,并利用requests.get抓取网页信息,但它让我领略到了Python的强大能力,希望通过后续的学习,编写出更加实用的程序,让Python给我的学习和生活带来更多便利!