python15

import random
import urllib.request
import re

#爬取首页下每页的内容 ------# compile(pat,re.S) 匹配多行数据
headers = (“User-Agent”,“Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36”)
opener = urllib.request.build_opener()
opener.addheaders = [headers]
urllib.request.install_opener(opener) #将opener安装为全局
for i in range(0,35):
thisurl = “xxxx/page”+str(i)+“xxx”
data = urllib.request.urlopen(thisurl).read().decode(“utf-8”,“ignore”)
pat = “” #正则
result = re.compile(pat,re.S).findall(data) # compile(pat,re.S) 匹配多行数据
#接下来让数据一行一行输出
for j in range(0,len(result)):
print(result[j])
print("---------") #这行代码 仅作修饰 输出结果 的作用

#用户代理池构建实战 --一定程度防止了封ip
‘’’
用户代理池,即将不同的(多个)用户代理组建成为一个池子,随后随机调用

User-Agent 的值
1.浏览器多的话从浏览器中取
2.百度搜索
‘’’
import urllib.request
import random
import re

#用户代理池用列表存储,这里构建3个用户代理(自己随便构建个数) 适合代理ip稳定的情况
uapools = [
“”, #这里输入不同的 User-Agent 的值
“”, #这里输入不同的 User-Agent 的值
“”, #这里输入不同的 User-Agent 的值
]
#接下来构建一个函数,来实现用户代理池的功能
def ua(uapools): # uapools 形参
thisua = random.choice(uapools) #choice 从列表中 随机 选一个参数
print(thisua)
headers = (“User-Agent”,thisua)
opener = urllib.request.build_opener()
opener.addheaders = [headers]
urllib.request.install_opener(opener) # 将opener安装为全局

for i in range(0,35):
ua(uapools)
thisurl = “xxxx/page”+str(i)+“xxx”
data = urllib.request.urlopen(thisurl).read().decode(“utf-8”,“ignore”)
pat = “” #正则
result = re.compile(pat,re.S).findall(data) # compile(pat,re.S) 匹配多行数据
#接下来让数据一行一行输出
for j in range(0,len(result)):
print(result[j])
print("---------") #这行代码 仅作修饰 输出结果 的作用

#ip代理与ip代理池的构建的两种方案
‘’’
ip代理概述 ----指的是让爬虫使用代理ip去爬取对方网站 --西刺代理或大象代理
ip代理池构建的第一种方式
ip代理池构建的第二种方式
‘’’

#ip代理的构建
import urllib.request
import random
import re

ip = “”
proxy = urllib.request.ProxyHandler({“http”:ip}) #ProxyHandler参数是字典 这个是代理的意思
opener = urllib.request.build_opener(proxy,urllib.request.HTTPHandler) #在 初始化 的时候,就实现了代理 ip 的操作
urllib.request.install_opener(opener) #将opener安装为全局
url = “” #要爬的网站地址
data = urllib.request.urlopen(url).read().decode(“utf-8”,“ignore”)
#print(len(data)) #打印出来看看
#将爬取的内容写进本地文件中
fh = open(“D:/xxxxx.htm”,“w”) #这种直接写入可能会报 gbk 错误,报了就用下面的方法
fh.write(data)
fh.close()

上面有可能报 gbk 的错误,下面这个代码用 二进制 写进文件,未解码的数据用wb方式写入

ip = “” # ip提取尽量用 国外的,国内的大部分都被屏蔽了
proxy = urllib.request.ProxyHandler({“http”:ip}) #ProxyHandler参数是字典 这个是代理的意思
opener = urllib.request.build_opener(proxy,urllib.request.HTTPHandler) #在 初始化 的时候,就实现了代理 ip 的操作
urllib.request.install_opener(opener) #将opener安装为全局
url = “” #要爬的网站地址
data1 = urllib.request.urlopen(url)
data = data1.read().decode(“utf-8”,“ignore”)
#print(len(data)) #打印出来看看
#将爬取的内容写进本地文件中
fh = open(“D:/xxxxx.htm”,“wb”)
fh.write(data1)
fh.close()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值