Python爬虫,获取,解析,存储详解

 更新时间:2021年10月08日 09:10:01   作者:万能守恒定律  
这篇文章主要介绍了Python爬虫获取、解析,获数据操作,其中代码描述非常详细,需要的朋友可以参考下,希望能够给你带来帮助

1.获取数据

import requests
def drg(url):
    try:
        head ={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/\
       537.36 (KHTML, like Gecko) Chrome/\
       91.0.4472.164 Safari/537.36'}
        r = requests.get(url,headers=head)
        r.raise_for_status()  # 如果状态不是200,引发HTTPError异常
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "产生异常"
url = "https://www.ip138.com/mobile.asp?mobile=13018305773&action=mobile"
print(drg(url))

2.解析数据

import requests
def login():
    try:
        # 登录之后界面的url
        urllogin="http://www.cqooc.com/user/login?username=12608199000635&password=48C032612C2A6777D28A969307B52127E198D59AA78522943C1B283CF7B89E69&nonce=6BA36BBB1F623279&cnonce=8257070573EFE28F"
        s=requests.session()
        r=s.post(urllogin,data=Form,headers=headers)
        r.encoding = r.apparent_encoding
        r.raise_for_status()
        return s
    except Exception as error:
        print(error)
def get_html(s,url):
    try:
        r=s.get(url,headers=headers)
        r.encoding = r.apparent_encoding
        r.raise_for_status()
        return r.text
    except Exception as error:
        print(error)
if __name__=="__main__":
    # 登录之后的界面user-agent
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36",
    }
    # 跟着自己的改变
    Form = {
        "username": "12608199000635",
        "password": "48C032612C2A6777D28A969307B52127E198D59AA78522943C1B283CF7B89E69",
        "nonce": "6BA36BBB1F623279",
        "cnonce": "8257070573EFE28F"
    }
    lin=login()
    # 个人中心的网址
    url="http://www.cqooc.com/my/learn"
    html=get_html(lin,url)
    print(html)

3.数据保存为CSV格式和存入数据库

保存为CSV

import  requests
from lxml import etree
import csv
#获取数据
def get_html(url,time=30):
    try:
        r = requests.get(url, timeout=time)
        r.encoding = r.apparent_encoding
        r.raise_for_status()
        return r.text
    except Exception as error:
        print(error)
def parser(html): #解析函数
    doc=etree.HTML(html) #html转换为soup对象
    out_list=[] #解析函数输出数据的列表
    #二次查找法
    for row in  doc.xpath("//*[@class='book-img-text']//li/*[@class='book-mid-info']"):
        row_data=[
            row.xpath("h4/a/text()")[0], #书名
            row.xpath("p[@class='author']/a/text()")[0], #作者
            row.xpath("p[2]/text()")[0].strip(), #介绍
            row.xpath("p[@class='update']/span/text()")[0] #更新日期
        ]
        out_list.append(row_data) #将解析的每行数据插入到输出列表中
    return out_list
def  save_csv(item,path): #数据存储,将list数据写入文件,防止乱码
    with open(path, "a+", newline='',encoding="utf-8") as f: #创建utf8编码文件
        csv_write = csv.writer(f) #创建写入对象
        csv_write.writerows(item) #一次性写入多行
if __name__=="__main__":
    for i in range(1,6):
        url="https://www.qidian.com/rank/fengyun?style=1&page={0}".format(i)
        html=get_html(url) #获取网页数据
        out_list=parser(html) #解析网页,输出列表数据
        save_csv(out_list,"d:\\book.csv") #数据存储

存入数据库

import pymysql
import requests
from lxml import etree
def get_html(url, time=3000):
    try:
        headers ={
            "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36 Edg/94.0.992.31"
        }
        r = requests.get(url, timeout=time,headers=headers)
        r.encoding = r.apparent_encoding
        r.raise_for_status()
        return r.text
    except Exception as err:
        print(err)
result = []
def parse_html(html):
    html = etree.HTML(html)
    for row in html.xpath('//*[@id="content"]/div/div[1]/ul/li'):
        Naame = row.xpath("div[2]/h2/a/text()")[0].strip()#//*[@id="content"]/div/div[1]/ul[1]/div[2]/h2/a
        score = row.xpath("div[2]/p[2]/span[2]/text()")[0].strip()#//*[@id="content"]/div/div[1]/ul[1]/div[2]/p[2]/span[2]
        price = row.xpath("div[2]/p[1]/text()")[0].strip().split("/")#//*[@id="content"]/div/div[1]/ul[1]/div[2]/p[1]/text()
        price= price[0]
        content= price[1]
        a=price[2]
        b= price[-1]
        detail = [Naame,score,price,content,a,b]
        result.append(detail)
def join_all(sql_insert,vals,**dbinfo):
    try:
        connet = pymysql.connect(**dbinfo)
        cursor = connet.cursor()
        cursor.executemany(sql_insert,vals)
        connet.commit()
        print('添加成功!')
    except Exception as err:
        print(err)
        connet.rollback()
    cursor.close()
if __name__=="__main__":
    for page in range(1,16):
        url="https://book.douban.com/latest?subcat=%E5%85%A8%E9%83%A8&p={0}".format(str(page))
        parms ={
            "host":"127.0.0.1",
            "port":3306,
            "user":"root",
            "passwd":"123456",
            "db":"db",
            "charset":"utf8"
        }
        html=get_html(url)
        parse_html(html)
    sql_insert = "INSERT INTO db(Naame,score,price,content,a,b)\
                           Values(%s,%s,%s,%s,%s,%s)"
    join_all(sql_insert,result,**parms)
    print(result)

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • Python实现随机生成图片验证码详解

    Python实现随机生成图片验证码详解

    这篇文章主要介绍了如何利用Python生成随机的图片验证码 并打印验证码的值,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起试试
    2022-01-01
  • Python中的迭代器你了解吗

    Python中的迭代器你了解吗

    迭代器是一种特殊的对象,它实现了迭代协议,允许按照一定的顺序逐个访问元素,本文就来带大家深入了解一下Python中迭代器的使用,需要的可以参考下
    2023-05-05
  • python批量处理打开多个文件

    python批量处理打开多个文件

    这篇文章主要介绍了python批量处理打开多个文件,文章围绕主题的相关内容展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-06-06
  • 详解python之多进程和进程池(Processing库)

    详解python之多进程和进程池(Processing库)

    本篇文章主要介绍了详解python之多进程和进程池(Processing库),非常具有实用价值,需要的朋友可以参考下
    2017-06-06
  • python cs架构实现简单文件传输

    python cs架构实现简单文件传输

    这篇文章主要为大家详细介绍了python cs架构实现简单文件传输,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Python学习教程之常用的内置函数大全

    Python学习教程之常用的内置函数大全

    python给我们提供了很多已经定义好的函数,下面这篇文章主要给大家介绍了关于Python学习教程之一些常用的内置函数,文中分享了关于数学函数、功能函数、类型转换函数、字符串处理和序列处理函数的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-07-07
  • python迭代器常见用法实例分析

    python迭代器常见用法实例分析

    这篇文章主要介绍了python迭代器常见用法,结合实例形式分析了Python迭代器概念、功能、常见操作方法及相关注意事项,需要的朋友可以参考下
    2019-11-11
  • 探索Python函数调用为何加速代码执行原理

    探索Python函数调用为何加速代码执行原理

    Python 作为一种解释型语言,其执行速度相对于编译型语言可能会较慢,然而,在Python中,通常观察到代码在函数中运行得更快的现象,这个现象主要是由于函数调用的内部优化和解释器的工作方式导致的,本文将深入探讨这个现象,并通过详细的示例代码进行解释
    2024-01-01
  • 使用TensorFlow实现简单线性回归模型

    使用TensorFlow实现简单线性回归模型

    这篇文章主要为大家详细介绍了使用TensorFlow实现简单线性回归模型,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • 使用Python在Excel中插入、修改、提取和删除超链接

    使用Python在Excel中插入、修改、提取和删除超链接

    超链接是Excel中的常用功能,通过点击超链接可以快速跳转到外部网站、本地文件或工作表中的特定单元格,有效提升数据访问的效率和用户体验,这篇博客将详细介绍如何使用Python在Excel中插入、修改、提取和删除超链接,需要的朋友可以参考下
    2025-02-02

最新评论