Spider总结

  1. 定义:
    1. 爬虫是一种网络数据的程序。
    2. 其实就是用Python程序模仿人点击浏览器并访问网站,而且模仿的越像越好,让Web站点无法发现你不是人。
  2. 爬取数据的目的:
    1. 测试数据
    2. 公司业务部门及其他部门所需要的数据
    3. 数据分析
  3. 企业获取数据方式
    1. 自有数据
    2. 第三方数据平台购买
    3. 爬虫爬取数据
  4. 爬虫的优势:
    1. Python :请求模块、解析模块丰富成熟,强大的Scrapy网络爬虫框架。
  5. 爬虫的分类:
    1. 通用网络爬虫(搜索引擎使用,遵守robots协议)
    robots协议 :网站通过robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取,通用网络爬虫需要遵守robots协议(君子协议) https://www.taobao.com/robots.txt
    2. 聚焦网络爬虫 :自己写的爬虫程序。
  6. 爬虫爬取数据步骤:
    1. 确定需要爬取的URL地址;
    2. 由请求模块向URL地址发出请求,并得到网站的响应;
    3. 从响应内容中利用解析模块提取所需数据:
    (1). 所需数据,保存;
    (2). 页面中有其他需要继续跟进的URL地址,继续第2步去发请求,如此循环.
    简单来说:就是【请求 解析 保存!】
  7. pycharm实现爬虫:
import urllib.request
#像****发起请求,并获取响应对象
resp = urllib.request.urlopen('http://www.****.com/')
#获取响应对象的内容 resp的方法:
html = resp.read().decode()     #decode bytes——>	string
#返回http的响应码
code= resp.getcode()
#获取返回实际数据的url
url = resp.geturl()
print(code,url)

打印结果:

****首页的源代码。
200   http://www.****.com/
  1. 包装请求头:User-Agent
    https://www.cnblogs.com/zrmw/p/9332801.html 获取请求头。这是爬虫与反爬虫的首要操作:
from urllib import request

#定义常用变量
url = 'http://httpbin.org/get'
headers = {
   'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0'}
#像百度发起请求
rep = request.Request(url=url,headers=headers)
#发起请求获得响应对象
resp = request.urlopen(rep)

#提取响应内容
html = resp.read().decode()

print(html)

打印结果:

{
   
  "args": {
   }, 
  "headers": {
   
    "Accept-Encoding": "identity", 
    "Host": "httpbin.org", 
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0"
  }, 
  "origin": "183.131.110.99, 183.131.110.99", 
  "url": "https://httpbin.org/get"
}
  1. urlencode()字符串编码:
from urllib import  request,parse

#拼接url地址
word = input('请输入搜索内容:')
params =parse.urlencode({
   'wd':word})
url = 'http://www.baidu.com/s?{}'
url = url.format(params)
#发请求获取响应内容
headers = {
   'User-Agent':'Mozilla/5.0'}
#1.发请求
rep = request.Request(url=url,headers=headers)
resp = request.urlopen(rep)
#2.拿响应对象中的内容
html = resp.read().decode()
#保存到本地文件
filename = word +'.html'
with open(filename,'w') as f:
    f.write(html)

运行结果:

请输入搜索内容:花千骨

和 创建了一个**.html文件

或者使用quote完成以上操作:

from urllib import  request,parse

#拼接url地址
word = input('请输入搜索内容:')
params =parse.quote(word)
url = 'http://www.baidu.com/s?wd={}'
url = url.format(params)
#发请求获取响应内容
headers = {
   'User-Agent':'Mozilla/5.0'}
#1.发请求
rep = request.Request(url=url,headers=headers)
resp = request.urlopen(rep)
#2.拿响应对象中的内容
html = resp.read().decode()
#保存到本地文件
filename = word +'.html'
with open(filename,'w') as f:
    f.write(html)

word = parse.unquote(params)  #解码操作

两段代码完成相同的工作。

  1. 文件抓取:
    1. 查看是不是静态页面(是);
    2. 查看网页源代码,你想查询的内容在不在(在);
    3. url地址缩减测试(http://*.com/?kw=&pn=***);
    4. 点击下一页找规律;
    5. 代码实现
from urllib import request,parse
import time
import random
from useragents import ua_list  #自制一个header池

class TiebaSpider(object):
    def __init__(self):
        self.url ='http://tieba.baidu.com/f?kw={}&pn={}'
    #1.请求:获取响应的html
    def get_html(self,url):
        headers = {
   'User-Agent': random.choice(ua_list)}   
        req = request.Request(url=url,headers=headers)
        #前两步,简单的实现伪装
        resp = request.urlopen(req)
        html =resp.read().decode()
        return html
    #2.解析
    def parse_html(self):
        pass
    #3.保存
    def save_html(self,filename,html):
        with open(filename,'w') as f:
            f.write(html)
    #4.入口函数
    def run(self):
        name = input('请输入贴吧名:')
        begin = int(input('请输入起始页:'))
        end = int(input('请输入终止页:'))

        params = parse.quote(name)
        #拼接地址,发请求,保存
        for page in range(begin,end+1):
            pn = (page-1)*50
            url= self.url.format(params,pn)
            html =self.get_html(url)
            filename = name + '-第%s页.html'%str(page)
            self.save_html(filename,html)
            print('第%d页抓取成功'%page)
            # time.sleep(random.randint(1,2))
            time.sleep(random.uniform(0,1))  #生成浮点数

if __name__ == '__main__':
    spider =TiebaSpider()
    spider.run()
  1. sudo pip3 install fake_useragent
    

from urllib import request,parse
import time
import random
from fake_useragent import  UserAgent

class TiebaSpider(object):
    def __init__(self):
        self.url ='http://tieba.baidu.com/f?kw={}&pn={}'

    #1.请求:获取响应的html
    def get_html(self,url):
        headers = {
   'User-Agent': UserAgent().random }    #简单的破解反爬机制
        req = request.Request(url=url,headers=headers)
        resp = request.urlopen(req)
        html =resp.read().decode()
        return html
    #2.解析
    def parse_html(self):
        pass

    #3.保存
    def save_html(self,filename,html):
        with open(filename,'w') as f:
            f.write(html)
    #4.入口函数
    def run(self):
        name = input('请输入贴吧名:')
        begin = int(input('请输入起始页:'))
        end = int(input('请输入终止页:'))

        params = parse.quote(name)
        #拼接地址,发请求&#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值