如何使用代理
1.基本使用
#proxies是代理池,使用key:value形式存放代理,Key是协议类型,value是具体的代理IP和端口号,推荐使用高匿代理
proxies = {"http":"http://61.135.217.7:80"}
requests.get("http://www.baidu.com",proxies=proxies)
2.如何构建代理池
- 爬取代理网站所有代理连接
- 抽取相应代理地址
- 测试代理地址是否可用(包括测试连通性及访问内容)
- 测试通过放入代理池
URL的构成
1.如何解析一个url(统一资源定位符)
#urlparse用于解析网址
from urllib.parse import urlparse
#解析结果是ParseResult(scheme='http', netloc='www.baidu.com', path='/test/python', params='', query='name=jack&age=19', fragment='frag')
parse_result = urlparse("http://www.baidu.com/test/python?name=jack&age=19#frag")
print(parse_result.netloc)
2.什么是url编码(urlencode)
为了防止字符中(主要是汉字)的特殊编码和http协议中的保留字符相冲突,必须对参数中的非ascii字符进行url编码,编码结果是'百分号+16进制的形式',一般GET方式中会出现这个问题
from urllib.parse import quote
quote("张三") #quote函数对张三进行了url编码
实现一个基本的爬虫练习(面向对象的爬虫)
爬取贴吧指定吧页数前几页内容
class TiebaSpider(object):
def __init__(self, name, page):
self.tieba_name = name
self.pages_download = page
self.base_url = "https://tieba.baidu.com/f?kw={}&ie=utf-8&pn={}"
self.header = {'User-Agent': "Python"}
def make_url_list(self):
# url_list = []
# for i in range(self.pages_download):
# download_url = self.base_url.format(self.tieba_name, i*50)
# url_list.append(download_url)
url_list=[ self.base_url.format(self.tieba_name, i*50) for i in range(self.pages_download)]
return url_list
def save_url(self, content, file_name):
with open(file_name, 'wb') as f:
f.write(content)
def download_url(self, url_str):
response = requests.get(url_str, headers=self.header)
return response.content
def run(self):
url_lists = self.make_url_list()
for url_str in url_lists:
result_content = self.download_url(url_str)
file_name = "{}-第{}页.html".format(self.tieba_name, url_lists.index(url_str)+1)
self.save_url(result_content, file_name)
tieba = TiebaSpider("python", 3)
tieba.run()