python网络爬虫入门

本文介绍了Python网络爬虫入门知识,包括使用urllib组件抓取网页,编写第一个爬虫,设置User Agent模拟浏览器,使用代理IP,以及通过cookie进行模拟登陆。还详细讲解了Beautiful Soup库的使用,如创建BS对象、解析HTML标签、获取内容,以及遍历文档树。此外,文章还涉及了图片爬取的实践操作。
摘要由CSDN通过智能技术生成

菜鸟学python(三)之网络爬虫入门

通过前面的基本语法学习,我们可以开始实战了,这次实战就是最火的网络爬虫

​ 网络爬虫,也叫网络蜘蛛(Web Spider),如果把互联网比喻成一个蜘蛛网,Spider就是一只在网上爬来爬去的蜘蛛。网络爬虫就是根据网页的地址来寻找网页的,也就是URL。举一个简单的例子,我们在浏览器的地址栏中输入的字符串就是URL,例如:https://www.baidu.com/

​ 在python3中在Python3.x中,我们可以使用urlib这个组件抓取网页,urllib是一个URL处理包,这个包中集合了一些处理URL的模块,如下:

1.urllib.request模块是用来打开和读取URLs的;

2.urllib.error模块包含一些有urllib.request产生的错误,可以使用try进行捕捉处理;

3.urllib.parse模块包含了一些解析URLs的方法;

4.urllib.robotparser模块用来解析robots.txt文本文件.它提供了一个单独的RobotFileParser类,通过该类提供的can_fetch()方法测试爬虫是否可以下载一个页面。

​ 我们使用urllib.request.urlopen()这个接口函数就可以很轻松的打开一个网站,读取并打印信息。

第一个爬虫

from urllib import request
if __name__ == '__main__':
    response = request.urlopen("https://www.baidu.com")		#用response这个变量接收响应值
    html = response.read()		   #用html这个变量接收response中的read后的值
    html = html.decode("utf-8") 	#进行utf-8转码
    print(html)

_name_ 是当前模块名,当模块被直接运行时模块名为 _main_ 。这句话的意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行。(自行百度知乎)

​ 当然,用chardet模块的detect()方法可以自判断出网页的编码格式,因此我们可以编写一个小程序来判断网页的编码格式:

from  urllib import request
import chardet
if __name__ == "__main__":
    response = request.urlopen("https://www.baidu.com")
    html = response.read()
    # html = html.decode("utf-8")
    charset = chardet.detect(html)
    print(charset)

”二代“爬虫(设置User Agent)

​ 有一些网站不喜欢被爬虫程序访问,所以会检测连接对象,如果是爬虫程序,也就是非人点击访问,它就会不让你继续访问,所以为了要让程序可以正常运行,需要隐藏自己的爬虫程序的身份。此时,我们就可以通过设置User Agent的来达到隐藏身份的目的,User Agent的中文名为用户代理,简称UA。

User Agent存放于Headers中,服务器就是通过查看Headers中的User Agent来判断是谁在访问。在Python中,如果不设置User Agent,程序将使用默认的参数,那么这个User Agent就会有Python的字样,如果服务器检查User Agent,那么没有设置User Agent的Python程序将无法正常访问网站。

​ Python允许我们修改这个User Agent来模拟浏览器访问,它的强大毋庸置疑。要修改User Agent,而User Agent通常是在header中,而header又在Request这个类的属性中,所以我们查看一下Request的属性:

class Request:

    def __init__(self, url, data=None, headers={},
                 origin_req_host=None, unverifiable=False,
                 method=None):
        self.full_url = url
        self.headers = {}	#这就是我们所需要填写User Agent的地方,它的类型是一个字典类型。
        self.unredirected_hdrs = {}
        self._data = None
        self.data = data
        self._tunnel_host = None

因此,想要设置User Agent,有两种方法:

​ 1.在创建Request对象的时候,填入headers参数(包含User Agent信息),这个Headers参数要求为字典;

​ 2.在创建Request对象的时候不添加headers参数,在创建完成之后,使用add_header()的方法,添加headers。

当然,设置“谁”在访问有很多种方法,这里只列举其中几种设备的:

.Google Chrome

Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36

Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19


iOS

Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3

Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A101a Safari/419.3

.Android

Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19

Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30

Mozilla/5.0 (Linux; U; Android 2.2; en-gb; GT-P1000 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

实战一波:(抓csdn的主页)

from urllib import request
if __name__ == "__main__":
    url = "https://www.csdn.net/"
    head = {}
    head['User-Agent'] = 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gec' \
                         'ko) Chrome/18.0.1025.166  Safari/535.19'
    req = request.Request(url,headers=head)
    response = request.urlopen(req)
    html = response.read().decode('utf-8')
    print(html)

使用第二种方法抓取:

from urllib import request

if __name__ == "__main__":
    #以CSDN为例,CSDN不更改User Agent是无法访问的
    url = 'http://www.csdn.net/'
    #创建Request对象
    req = request.Request(url)
    #传入headers
    req.add_header('User-Agent', 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166  Safari/535.19')
    #传入创建好的Request对象
    response = request.urlopen(req)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值