当前位置:网站首页>自己学习爬虫写的基础小函数
自己学习爬虫写的基础小函数
2022-08-04 05:26:00 【Drizzlejj】
1.带头和多个参数请求一个网页,因为很多网站都会检测请求头信息。
def Paramsrequest():
base_url = 'http://www.baidu.com/s?'
# 请求所需要携带的参数
data = {
'wd':'周',
'sex':'男',
'location':'中国'
}
# 转化为 unicode 编码
new_data = urllib.parse.urlencode(data)
# 拼接请求资源路径
url = base_url + new_data
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0'
}
request = urllib.request.Request(url=url, headers=headers)
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
print(content)
2.post请求百度翻译,并返回结果
1.获取url
# post 请求百度翻译
import json
def PostBaiduFanyi():
url = 'https://fanyi.baidu.com/sug'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0'
}
# F12 =》 Network =》 all 对应的接口 =》 Headers =》 Form Data 中可查看到携带的参数
data = {
'kw':'spider'
}
# post 请求的参数必须进行编码
new_data = urllib.parse.urlencode(data).encode('utf-8')
# post 请求的参数是不会拼接在 url 的后面,需要放在对象定制的参数中(不排除也有post请求的参数拼接在url链接)
request = urllib.request.Request(url=url,data=new_data, headers=headers)
response = urllib.request.urlopen(request)
# 获取响应的数据
content = response.read().decode('utf-8')
# 字符串 =》 json 对象
obj = json.loads(content)
print(obj)
反爬会检查 请求头内容,暴力方法全部复制 Request Headers
3.后去豆瓣前十页电影
import re
def GetDoubanOther():
def create_request(page):
base_url = 'https://movie.douban.com/j/search_subjects?type=movie&tag=%E5%8A%A8%E4%BD%9C&sort=recommend&page_limit=20&'
data = {
'page_start':(page - 1) * 20
}
new_data = urllib.parse.urlencode(data) # data 编码
url = base_url + new_data # 拼接url
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0'
}
request = urllib.request.Request(url=url,headers=headers) # 定制请求参数
return request
def get_content(request):
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
return content
def down_load(page,content):
with open('douban' + str(page) + '.json','w',encoding='utf-8') as fp:
str_content = re.sub(r'\\', '', str(content)) # 将 content 转为字符串,并正则匹配删除转移 '\'
fp.write(str_content)
stat_page = int(input('起始页码:'))
end_page = int(input('结束页:'))
for page in range(stat_page,end_page+1):
request = create_request(page)
content = get_content(request)
down_load(page,content)
4.获取肯德基城市餐厅,看看你所在的城市肯德基的位置
def postkfcinfo():
def create_request(page):
url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname'
data = {
'cname': '成都',
'pid':'',
'pageIndex': page,
'pageSize': '10'
}
new_data = urllib.parse.urlencode(data).encode('utf-8')
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0'
}
request = urllib.request.Request(url=url,headers=headers,data=new_data) # 定制请求参数
return request
def get_content(request):
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
return content
def down_load(page,content):
with open('kfc' + str(page) +'.json','w',encoding='utf-8') as fp:
fp.write(content)
start_page = int(input('起始页码:'))
end_page = int(input('结束页码:'))
for page in range(start_page,end_page+1):
request = create_request(page)
content = get_content(request)
down_load(page,content)
5.使用自己的IP会被反爬给锁定,不让访问非常不安全,那么就去使用一个代理IP吧。handler 定制更高级的请求头(代理IP)
import random
def Handlergetbaidu():
url = 'http://www.baidu.com'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0'
}
request = urllib.request.Request(url=url,headers=headers)
# handler = urllib.request.HTTPHandler() # 1.获取 hander 对象
# 创建一个简易的代理池
proxies_poll = [
{'http':'60.211.218.78:53281'}, # 快代理去买一个IP
{'http': '60.211.218.78:53281'},
]
proxies = random.choice(proxies_poll) # 随机选择代理池中的一个IP
handler = urllib.request.ProxyHandler(proxies=proxies)
opener = urllib.request.build_opener(handler) # 2.获取 open 对象
response = opener.open(request) # 3.调用 open 方法
content = response.read().decode('utf-8')
print(content)
.
边栏推荐
猜你喜欢
Cannot read properties of null (reading 'insertBefore')
MySQL数据库(基础)
字节最爱问的智力题,你会几道?
Canal mysql data synchronization
Embedded system driver primary [3] - _IO model in character device driver foundation
企业需要知道的5个 IAM 最佳实践
腾讯136道高级岗面试题:多线程+算法+Redis+JVM
7.16 Day22---MYSQL (Dao mode encapsulates JDBC)
Linux环境下redis的下载、安装和启动(建议收藏)
程序员也应了解的Unity粒子系统
随机推荐
FPGA学习笔记——知识点总结
【JS】js给对象动态添加、设置、删除属性名和属性值
9、动态SQL
Unity行为树AI分享
bind和function
warning C4251: “std::vector<_Ty>”需要有 dll 接口由 class“Test”的客户端使用错误
文献管理工具 | Zotero
7.18 Day23 - the markup language
8大软件供应链攻击事件概述
腾讯136道高级岗面试题:多线程+算法+Redis+JVM
phpexcel导出数据为xml
Swoole学习(一)
在被面试官说了无数次后,终于潜下心来整理了一下JVM的类加载器
Sublime Text 3 2021.8.3 个人配置
如何低成本修bug?测试左移给你答案
通过&修改数组中的值
lambda函数用法总结
JS代码预编译
如何将 DevSecOps 引入企业?
Unity自动生成阻挡Collider的GameObject工具