栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间:发布时间: 百科书网 趣学号
1.什么是互联网爬虫

如果我们把互联网比作一张大的蜘蛛网,那一台计算机上的数据便是蜘蛛网上的一个猎物,而爬虫程序就是一只小 蜘蛛,沿着蜘蛛网抓取自己想要的数据
解释 1 :通过一个程序,根据 Url ( http : // www . taobao . com ) 进行爬取网页,获取有用信息    解释 2 :使用程序模拟浏览器,去向服务器发送请求,获取响应信息  
2.爬虫核心
1. 爬取网页:爬取整个网页 包含了网页中所有得内容 2. 解析数据:将网页中你得到的数据 进行解析 3. 难点:爬虫和反爬虫之间的博弈
3.爬虫的用途
  • 数据分析/人工数据集
  • 社交软件冷启动
  • 舆情监控
  • 竞争对手监控
4.爬虫分类

通用爬虫:

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

功能  访问网页 ‐> 抓取数据 ‐> 数据存储 ‐> 数据处理 ‐> 提供检索服务 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)

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/274932.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号