您当前的位置: 首页 >  Python

ThnPkm

暂无认证

  • 2浏览

    0关注

    98博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Python 爬虫笔记1

ThnPkm 发布时间:2021-12-24 00:03:11 ,浏览量:2

目录

Robots协议(也称为爬虫协议) 

Requests 库

requests 入门

保存网页图片 (练习一下requests使用)

 获取百度

获取百度加强版

自定义参数

自定义参数(字典版)

获取贴吧n页数据

获取贴吧n页数据(类与对象版)

Robots协议(也称为爬虫协议) 

robots协议也叫robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。

robots协议并不是一个规范,而只是约定俗成的,所以并不能保证网站的隐私。

Requests 库

requests 入门

用IDLE写的

import requests
r = requests.get("http://www.baidu.com")
r.status_code
200  #表示正常
r.encoding = 'utf-8'
r.text

用pycharm写:

声明编码格式:

r.encoding = 'utf-8'  #编码格式
print(r.text)

 另一种方式(等价于上面,节省一行代码) decode( )默认utf-8格式

print(r.content.decode()) 

保存网页图片 (练习一下requests使用)
import requests
            #存放图片链接
image_url = 'http://img.ewebweb.com/uploads/20191231/11/1577761365-bpjNduFZKa.jpg'

response = requests.get(image_url) #请求图片
print(response.content)            #图片不需要编码格式
with open('二哈.jpg','wb') as f:    # 括号内 第一个是保存到本地的文件名,
                                   # 第二个是文件的访问模式 wb二进制写入文件
    f.write(response.content)      #用write把内容写入本地

 获取百度
import requests

url = 'http://www.baidu.com'
response = requests.get(url)
print(response.content.decode())
print(response.request.headers)  # 请求头

爬虫爬取到的数据比浏览器的少很多 ,很多js都不给

获取百度加强版
import requests

url = 'https://www.baidu.com'

headers={  #这里是用字典的格式带入了浏览器的请求头
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"}
response = requests.get(url, headers=headers) #添加请求头参数
print(response.content.decode())
print(response.request.headers)

数据与百度主页一样,将得到的HTML数据保存打开后就是百度主页

自定义参数
import requests

url = 'https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=你好'

headers={  
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"}

text =input('请输入要搜索的内容:')

response = requests.get(url.format(text), headers=headers) 

print(response.content.decode())

运行出html后得到,

自定义参数(字典版)
import requests

url = 'https://www.baidu.com/s?'
text =input('请输入要搜索的内容:')
params={'wd':text}  #字典形式

headers={
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"}

response = requests.get(url, headers=headers,params=params)

print(response.request.url)  #直接返回搜索后的url链接

 

获取贴吧n页数据
import requests

url = 'https://tieba.baidu.com/f?kw={}&pn={}' #设置好链接
text =input('请输入贴吧名字:')

#生成url列表                                          #一页50个帖子,i*50表示第i页
url_list=[url.format(text, i*50) for i in range(5)]  #for循环实现下一页

print(url_list)  #打印url列表 出现五个链接

 

将五页贴吧保存下来

import requests

url = 'https://tieba.baidu.com/f?kw={}&pn={}'  # 设置好链接
text = input('请输入贴吧名字:')

# 生成url列表                                          #一页50个帖子,i*50表示第i页
url_list = [url.format(text, i * 50) for i in range(5)]  # for循环实现下一页

print(url_list)

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"}

for item_url in url_list:
    response = requests.get(item_url, headers=headers)
    file_name = '贴吧' + text + '第{}页'.format(url_list.index(item_url) + 1) + '.html'
                                         #format()用来填充{}
                                         #index() 函数用于从列表中找出其下标
    with open(file_name,'w',encoding='utf-8')as f:  #写入html文件需要在open后面定义’utf-8‘
        f.write(response.content.decode())          #否则报错

 Python的index函数用法  

Python中format函数用法

生成了五页贴吧html文件

获取贴吧n页数据(类与对象版)

import requests


class Tieba_spider(object):

    def __init__(self, text):  # 初始化方法
        self.text = text
        self.url = 'https://tieba.baidu.com/f?kw=' + text + '&pn={}'
        self.headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36"}

    def get_url_list(self):
        """生成url列表"""
        url_list = [self.url.format(i * 50) for i in range(5)]
        return url_list

    def get_data_fromurl(self, url):
        '''从服务器获取数据 并且解码返回'''
        response = requests.get(url, headers=self.headers)
        return response.content.decode()

    def save_html(self, html_str, num):  # 第一个参数是服务器请求获取到的数据,第二个参数是页数
        '''保存到本地'''
        file_name = '贴吧' + text + '第{}页'.format(num) + '.html'
        with open(file_name, 'w', encoding='utf-8') as f:
            f.write(html_str)

    def run(self):  # run方法用来执行爬虫
        '''确定url 生成url列表'''
        url_list = self.get_url_list()
        for item_url in url_list:
            html_str = self.get_data_fromurl(item_url)
            '''保存'''
            self.save_html(html_str, url_list.index(item_url) + 1)
            # 第一个参数是服务器请求获取到的数据,第二个参数是页数


if __name__ == '__main__':  # 一个引擎来调用run
    text = input('请输入贴吧的名字:')
    spider = Tieba_spider(text)
    spider.run()

一些小细节导致一直报错,一定要注意参数的带入,

关注
打赏
1660722558
查看更多评论
立即登录/注册

微信扫码登录

0.0373s