Python Urllib爬虫基础 (个人学习笔记仅限参考)

本文详细介绍了互联网爬虫的工作原理,包括通用爬虫和聚焦爬虫的差异,以及爬虫在数据分析、舆情监控等方面的应用。同时,探讨了爬虫与反爬虫之间的斗争,如User-Agent、代理IP、验证码等反爬手段。还讲解了Python中urllib库的使用,包括请求对象定制和编解码方法。最后,通过实例展示了如何应对动态加载和数据加密的挑战。
摘要由CSDN通过智能技术生成

1.什么是互联网爬虫

如果我们把互联网比作一张大的蜘蛛网,那一台计算机上的数据便是蜘蛛网上的一个猎物,而爬虫程序就是一只小 蜘蛛,沿着蜘蛛网抓取自己想要的数据
解释 1 :通过一个程序,根据 Url ( http : // www . taobao . com ) 进行爬取网页,获取有用信息   
解释 2 :使用程序模拟浏览器,去向服务器发送请求,获取响应信息  

2.爬虫核心

1. 爬取网页:爬取整个网页 包含了网页中所有得内容
2. 解析数据:将网页中你得到的数据 进行解析
3. 难点:爬虫和反爬虫之间的博弈

3.爬虫的用途

  • 数据分析/人工数据集
  • 社交软件冷启动
  • 舆情监控
  • 竞争对手监控

4.爬虫分类

通用爬虫:

实例  百度、360googlesougou等搜索引擎‐‐‐伯乐在线

功能  访问网页 ‐> 抓取数据 ‐> 数据存储 ‐> 数据处理 ‐> 提供检索服务
robots 协议
一个约定俗成的协议,添加 robots . txt 文件,来说明本网站哪些内容不可以被抓取,起不到限制作用自己写的爬虫无需遵守
网站排名 ( SEO )
1. 根据 pagerank 算法值进行排名(参考个网站流量、点击率等指标)
2. 百度竞价排名
缺点
1. 抓取的数据大多是无用的
2. 不能根据用户的需求来精准获取数据

 

聚焦爬虫
功能
根据需求,实现爬虫程序,抓取需要的数据
设计思路
1. 确定要爬取的 url
如何获取 Url
2. 模拟浏览器通过 http 协议访问 url ,获取服务器返回的 html 代码
如何访问
3. 解析 html 字符串(根据一定规则提取需要的数据)
如何解析

 

5.反爬手段 

1. User Agent
        User Agent中文名为用户代理,简称 UA ,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版 User Agent 中文名为用户代理,简称 UA ,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
2. 代理 IP
        西次代理
        快代理
        什么是高匿名、匿名和透明代理?它们有什么区别?
        1. 使用透明代理,对方服务器可以知道你使用了代理,并且也知道你的真实 IP
        2. 使用匿名代理,对方服务器可以知道你使用了代理,但不知道你的真实 IP
        3. 使用高匿名代理,对方服务器不知道你使用了代理,更不知道你的真实 IP
3. 验证码访问
        打码平台
        云打码平台
        超级🦅
4. 动态加载网页 网站返回的是 js 数据 并不是网页的真实数据
        selenium驱动真实的浏览器发送请求
5. 数据加密
分析 js 代码

6.urllib 库的使用

urllib . request . urlopen () 模拟浏览器向服务器发送请求
response         服务器返回的数据
        response的数据类型是 HttpResponse
        字节 ‐‐> 字符串
                解码decode
        字符串 ‐‐> 字节
                编码encode
        read ()                                    字节形式读取二进制 扩展: rede ( 5 ) 返回前几个字节
        readline ()                              读取一行
        readlines ()                             一行一行读取 直至结束
        getcode ()                               获取状态码
        geturl ()                                   获取 url
        getheaders ()                          获取 headers
        urllib . request . urlretrieve ()
                                                        请求网页
                                                        请求图片
                                                        请求视频

 

 7.请求对象的定制

UA 介绍: User Agent 中文名为用户代理,简称 UA ,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统 及版本、CPU 类型、浏览器及版本。浏览器内核、浏览器渲染引擎、浏览器语言、浏览器插件等
语法:request = urllib.request.Request()

 8.编解码

1.get 请求方式:urllib.parse.quote()

import urllib.request
import ssl
import urllib.parse
#通过导入ssl模块把证书验证改成不用验证就行了。
ssl._create_default_https_context = ssl._create_unverified_context 

url = 'https://www.baidu.com/s?wd='
headers={
    'user-agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}
#将詹姆斯变成unicode编码格式   依赖于urllib.parse

name = urllib.parse.quote('詹姆斯')
#print(name)
url = url+name
#print(url)

#请求对象定制
request = urllib.request.Request(url=url,headers=headers)
#模拟浏览器向服务器发送请求
response=urllib.request.urlopen(request)
#获取响应内容
content=response.read().decode('utf-8')
#打印内容
print(content)

2.get请求方式:urllib.parse.urlencode()

import  urllib.request
import  urllib.parse
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
base_url = 'https://www.baidu.com/s?'

data = {
    'wd' : '詹姆斯',
    'sex' : '男'

}
headers={
    'user-agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}
new_url = urllib.parse.urlencode(data)
url = base_url + new_url
headers={
    'user-agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'
}
#请求对象定制
request = urllib.request.Request(url=url,headers=headers)

#模拟浏览器向服务器发送请求
response = urllib.request.urlopen(request)

#获取网页源码数据
content = response.read().decode('utf-8')
print(content)

3.post请求

import urllib.request 
import urllib.parse 
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
url = 'https://fanyi.baidu.com/sug' 
headers = { 
    'user‐agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36' 
}
keyword = input('请输入您要查询的单词') 
data = { 
    'kw':keyword 
}
data = urllib.parse.urlencode(data).encode('utf‐8') 
request = urllib.request.Request(url=url,headers=headers,data=data) 
response = urllib.request.urlopen(request) 
print(response.read().decode('utf‐8'))

4.get 和 post 区别

1 get 请求方式的参数必须编码,参数是拼接到 url 后面,编码之后不需要调用 encode 方法
2 post 请求方式的参数必须编码,参数是放在请求对象定制的方法中,编码之后需要调用 encode 方法

5.小案例 百度详细翻译

 

import urllib.request
import urllib.parse
import ssl
import json
ssl._create_default_https_context = ssl._create_unverified_context
url = 'https://fanyi.baidu.com/v2transapi?from=en&to=zh'
headers = {
    'Accept' : '*/*',
    #'Accept-Encoding' : 'gzip, deflate, br',
    'Accept-Language' : 'zh-CN,zh;q=0.9',
    'Connection' : 'keep-alive',
    'Content-Length' : '136',
    'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8',
    'Cookie':'88FC5EB492CFC5B3DEDB97EF524CC056; PSTM=1625455688; BAIDUID=88FC5EB492CFC5B3094372450577A441:FG=1; __yjs_duid=1_7f4083786b10d2693da503a13f93a0fa1625456003607; BDUSS=kl0enRDU1VlYlh4bVBHdmpQYi02UnVBVUdsRUttZlBUaFVkOFNJQU9hNGRMMHhoRVFBQUFBJCQAAAAAAAAAAAEAAAAGik00Y2hlbjY1NDMyMTIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2iJGEdoiRha; BDUSS_BFESS=kl0enRDU1VlYlh4bVBHdmpQYi02UnVBVUdsRUttZlBUaFVkOFNJQU9hNGRMMHhoRVFBQUFBJCQAAAAAAAAAAAEAAAAGik00Y2hlbjY1NDMyMTIyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2iJGEdoiRha; REALTIME_TRANS_SWITCH=1; FANYI_WORD_SWITCH=1; HISTORY_SWITCH=1; SOUND_SPD_SWITCH=1; SOUND_PREFER_SWITCH=1; H_PS_PSSID=34648_34531_34068_31254_34551_33848_34585_34504_26350_34627_34419_34556_34688_34671; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BAIDUID_BFESS=88FC5EB492CFC5B3094372450577A441:FG=1; BCLID=9237247964798861170; BDSFRCVID=QPIOJexroG0YyvRHsi7Rfd7YY_weG7bTDYLEOwXPsp3LGJLVJeC6EG0Pts1-dEu-EHtdogKK0mOTHUkF_2uxOjjg8UtVJeC6EG0Ptf8g0M5; H_BDCLCKID_SF=tR3aQ5rtKRTffjrnhPF3-R83XP6-hnjy3bRkX4Q4Wp7DhDTIb5JZWq4Wbttf5q3RymJ42-39LPO2hpRjyxv4y4Ldj4oxJpOJ-bCL0p5aHl51fbbvbURvD-ug3-7PaM5dtjTO2bc_5KnlfMQ_bf--QfbQ0hOhqP-jBRIEoCvt-5rDHJTg5DTjhPrMhHAJWMT-MTryKKJwM4ncOh7PDq6tb5-4WJnfKx-fKHnRhlR2B-3iV-OxDUvnyxAZyxomtfQxtNRJQKDE5p5hKq5S5-OobUPUDMc9LUvP22cdot5yBbc8eIna5hjkbfJBQttjQn3hfIkj2CKLtCvDqTrP-trf5DCShUFs-TjCB2Q-XPoO3KJZJtQ-yMnDDq8EbaJkXlRf5mkf3fbgylRp8P3y0bb2DUA1y4vpBtQmJeTxoUJ2-KDVeh5Gqfo15-0ebPRiJPr9QgbPBhQ7tt5W8ncFbT7l5hKpbt-q0x-jLTnhVn0MBCK0hDvPKITD-tFO5eT22-us2mFJ2hcHMPoosIJX2JjCyM4VXtchKTbkyGOf0l05KfbUoqRHXnJi0btQDPvxBf7pWDTm_q5TtUJMqIDzbMohqfLn5MOyKMnitIj9-pnG2hQrh459XP68bTkA5bjZKxtq3mkjbPbDfn028DKuDjRDKICV-frb-C62aKDsafjxBhcqJ-ovQT3Z2Jkgyhb0thjh5nvkhx755l0bHxbeWfvMXn-R0hbjJM7xWeJpaJ5nJq5nhMJmKTLVbML0qto7-P3y523ion6vQpnljpQ3DRoWXPIqbN7P-p5Z5mAqKl0MLPbtbb0xXj_0DjPVKgTa54cbb4o2WbCQLxJz8pcN2b5oQT842qjNBnJ0Jarh0I3wyx7beq06-lOUWfAkXpJvQnJjt2JxaqRCWJ5TMl5jDh3MKToDb-otexQ7bIny0hvctn6cShnaMUjrDRLbXU6BK5vPbNcZ0l8K3l02V-bIe-t2XjQh-p52f6DDJRA83f; BCLID_BFESS=9237247964798861170; BDSFRCVID_BFESS=QPIOJexroG0YyvRHsi7Rfd7YY_weG7bTDYLEOwXPsp3LGJLVJeC6EG0Pts1-dEu-EHtdogKK0mOTHUkF_2uxOjjg8UtVJeC6EG0Ptf8g0M5; H_BDCLCKID_SF_BFESS=tR3aQ5rtKRTffjrnhPF3-R83XP6-hnjy3bRkX4Q4Wp7DhDTIb5JZWq4Wbttf5q3RymJ42-39LPO2hpRjyxv4y4Ldj4oxJpOJ-bCL0p5aHl51fbbvbURvD-ug3-7PaM5dtjTO2bc_5KnlfMQ_bf--QfbQ0hOhqP-jBRIEoCvt-5rDHJTg5DTjhPrMhHAJWMT-MTryKKJwM4ncOh7PDq6tb5-4WJnfKx-fKHnRhlR2B-3iV-OxDUvnyxAZyxomtfQxtNRJQKDE5p5hKq5S5-OobUPUDMc9LUvP22cdot5yBbc8eIna5hjkbfJBQttjQn3hfIkj2CKLtCvDqTrP-trf5DCShUFs-TjCB2Q-XPoO3KJZJtQ-yMnDDq8EbaJkXlRf5mkf3fbgylRp8P3y0bb2DUA1y4vpBtQmJeTxoUJ2-KDVeh5Gqfo15-0ebPRiJPr9QgbPBhQ7tt5W8ncFbT7l5hKpbt-q0x-jLTnhVn0MBCK0hDvPKITD-tFO5eT22-us2mFJ2hcHMPoosIJX2JjCyM4VXtchKTbkyGOf0l05KfbUoqRHXnJi0btQDPvxBf7pWDTm_q5TtUJMqIDzbMohqfLn5MOyKMnitIj9-pnG2hQrh459XP68bTkA5bjZKxtq3mkjbPbDfn028DKuDjRDKICV-frb-C62aKDsafjxBhcqJ-ovQT3Z2Jkgyhb0thjh5nvkhx755l0bHxbeWfvMXn-R0hbjJM7xWeJpaJ5nJq5nhMJmKTLVbML0qto7-P3y523ion6vQpnljpQ3DRoWXPIqbN7P-p5Z5mAqKl0MLPbtbb0xXj_0DjPVKgTa54cbb4o2WbCQLxJz8pcN2b5oQT842qjNBnJ0Jarh0I3wyx7beq06-lOUWfAkXpJvQnJjt2JxaqRCWJ5TMl5jDh3MKToDb-otexQ7bIny0hvctn6cShnaMUjrDRLbXU6BK5vPbNcZ0l8K3l02V-bIe-t2XjQh-p52f6DDJRA83f; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1631869573,1632280940; Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1632281197; __yjs_st=2_NmYxMDYxOWE1YjRhMTczYWIyYTg5NWI3YWY1YmYyOGU1MzgzNGM2NmEyZGRlNGNiYTFhOGI1ODI5ZjA2YzM3MDk2ZjQ0ZmZhMzQxMDA2ODRmNDlkMDE1NjFjZWI1ZGIzZjJmZDM4MjU3MmEzMzM1YzM2MWI4MDA2MWU1ZWU1MTcwZTk3YThmNzIwNTZlYTg5YmU5OWMyZWVjMTgxZTEwYTIwMjMzNmM2YjY0ZmIxZTEyOThhNDJhODJmZDVhMjRmMDc4YjZlMjNjYzJjOGYyMTFlOTY1YjdjMDJiZGRkODQ2Y2ViYjIxZTUzY2FhYjkwN2EwZWU1YWExZWQ1ZjVlZV83XzUxMWQ3ZDQ5; ab_sr=1.0.1_NjhhNTA5YTJiYjcyMmZkNzU0NzExZWZiNzkxMWY0YTE2ZDUzYjkzNjk1YTY4NDEzZDg5ZTVmNGNiNjA4YTk2ZDQ1MDQ0OTBmY2ZjZDI5OTVkMjA4ODA3YjZkMGY2NzYxODE0ODNhMzQ2NjkxYzVlMDU1NzBkY2I4ZWFjNGY5OGJjODQ1OTlhNWQ0N2NmNDFiYmI0ZGYxNTgwMWNmYzdjODRiOWVjY2JhMzgzMTgyMDg4NjNiMjgzMDllMTMxNWIz',
    'Host': 'fanyi.baidu.com',
    'Origin': 'https://fanyi.baidu.com',
    'Referer': 'https://fanyi.baidu.com/?aldtype=16047',
    'sec-ch-ua': '"Chromium";v="92", " Not A;Brand";v="99", "Google Chrome";v="92"',
    'sec-ch-ua-mobile': '?0',
    'Sec-Fetch-Dest': 'empty',
    'Sec-Fetch-Mode': 'cors',
    'Sec-Fetch-Site': 'same-origin',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36',
    'X-Requested-With': 'XMLHttpRequest',
}
data = {
    'from' : 'en',
    'to' : 'zh',
    'query' : 'james',
    'transtype' : 'realtime',
    'simple_means_flag': '3',
    'sign': '350819.112978',
    'token': 'e32acf88174e5591d2e57863d1d204fd',
    'domain' : 'common',
}
data = urllib.parse.urlencode(data).encode('utf-8')
request = urllib.request.Request(url=url,data=data,headers=headers)
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
new_content = json.loads(content)
print(new_content)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值