python爬虫入门

学习网站:http://c.biancheng.net/python_spider/user-agent.html

重构UA实现反爬

#重构UA实现反爬
from urllib import request;
url='http://httpbin.org/get';
headers = {
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:65.0) Gecko/20100101 Firefox/65.0'};#自己定义一个头,欺骗浏览器我不是机器人在访问
req = request.Request(url=url,headers=headers);#Request用来重新构建UA
res = request.urlopen(req);
html=res.read().decode('utf-8');#返回来的page是bytes,需要decode解码转为str
print(html);

引入库遇到的类似错误和解决手段:
https://www.codeleading.com/article/34813547277/

UA池

from fake_useragent import UserAgent;
ua=UserAgent();
#随机取一个ie信息
print(ua.ie);
#随机取一个火狐浏览器信息
print(ua.firework);

Python简单爬虫抓取网页

from urllib import request;
from urllib import parse
from fake_useragent import UserAgent
import ssl

#url address
url='http://www.baidu.com/s?wd={}'
word=input('please input something you want search:')
params=parse.quote(word)#quote把word全部转化为某一浏览平台可识别的形式
full_url=url.format(params)#把params传入到url中的{}中
#向url发送请求
# 构建请求头
UserAgent=UserAgent().ie
headers={'User-Agent':UserAgent}
# 关闭ssl认证
ssl._create_default_https_context = ssl._create_unverified_context
# 创建请求对应
req=request.Request(url=full_url,headers=headers)
# 获取响应对象
res=request.urlopen(req)
# 获取响应内容
html=res.read().decode('utf-8')

# 保存为本地文件
filename=word+'.html'
with open(filename,'w',encoding='utf=8') as f:
    f.write(html)

访问的网站是https://,需要SSL认证,而直接用urllib会导致本地验证失败(具体原因未查明),所以使用ssl._create_unverified_context关闭认证
在使用urllib.request.Request(url)前,添加代码:

#在使用urllib.request.Request(url)前,添加代码
import ssl
ssl._create_default_https_context = ssl._create_unverified_context

然后就能字啊同目录下看到一个这样的文件(输入的是编程帮)在这里插入图片描述

Python爬虫抓取百度贴吧数据

from urllib import request,parse
from fake_useragent import UserAgent
import time,random,ssl
#全局取消证书验证
ssl._create_default_https_context = ssl._create_unverified_context

class TiebaSpider():
    # 初始化url属性
        #__init__()会在对象被实例化的时候调用
    def __init__(self):
        #python中可以不用声明url直接生成url属性并赋值
        self.url='http://tieba.baidu.com/f?{}'

    # 构造请求函数(java中对应方法),得到页面
    # 三步走:1.得到html 2.解析 3.保存
    def get_html(self,url):
        print('this is random ua:',UserAgent().ie)
        heards={'User-Agent':UserAgent().ie}
        req=request.Request(url=url,headers=heards)
        res=request.urlopen(req)
        html=res.read().decode('gbk','ignore')
        return html

    def parse_html(self):
        pass

    def save_html(self,filename,html):
        with open(filename,'w') as f:
            f.write(html)

    def run(self):
        name=input('please input:')
        begin=int(input('the start page:'))
        stop=int(input("the stop page:"))
        for page in range(begin,stop+1):
            pn=(page-1)*50
            params={'kw':name,'pn':str(pn)}
            # 拼接url地址
            params=parse.urlencode(params)
            url=self.url.format(params)
            #发请求
            html=self.get_html(url)
            filename='{}-{}页.html'.format(name,page)
            self.save_html(filename,html)
            #提示
            print("第%d页抓取成功"%page)
            # sleep()暂停给定描述后执行程序
            # 没爬取一个页面随机休眠1-2秒的时间
            time.sleep(random.randint(1,2))
if __name__=='__main__':
    start=time.time()
    spider=TiebaSpider()
    spider.run()
    end=time.time()
    print('执行时间:%.2f'%(end-start))

python面向对象的爬虫模版

# 程序结构
class xxxSpider(object):
    def __init__(self):
        # 定义常用变量,比如url或计数变量等
       
    def get_html(self):
        # 获取响应内容函数,使用随机User-Agent
   
    def parse_html(self):
        # 使用正则表达式来解析页面,提取数据
   
    def write_html(self):
        # 将提取的数据按要求保存,csv、MySQL数据库等
       
    def run(self):
        # 主函数,用来控制整体逻辑
       
if __name__ == '__main__':
    # 程序开始运行时间
    spider = xxxSpider()
    spider.run()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值