python爬虫(2)

如何使用代理

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()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值