Python 原生方法抓取数据

编程入门 行业动态 更新时间:2024-10-23 23:24:08

Python 原生<a href=https://www.elefans.com/category/jswz/34/1771314.html style=方法抓取数据"/>

Python 原生方法抓取数据

文章目录

        • 所用到的Python包
        • 发送请求
        • 使用BeautifulSoup解析HTML数据
        • 使用lxml解析标签数据
        • 使用正则匹配解析数据
        • 使用json包解析数据
        • 写入数据到csv文件
        • 下载xsl/word 文件
        • 存储到MySQL数据库中
        • 使程序休眠
        • 编解码
        • 优化


概述:一般的爬虫类库主要是使用reuests、BeautifulSoup、lxml 、json、csv、re、pymysql这几个常用的库,
结合使用re 、BeautifulSoup、lxml 字符串切割与替换以及数组灵活解析数据,可用str(xxx)将数据转换成为字符串格式的数据进行replace和substr操作。

总体流程:

大体确定待抓取页面的信息

  • 1.查看页面的翻页方式,F12 查看请求中是否带有page的路径信息,确定翻页的方式
  • 2.查看数据的返回格式,F12 找到NetWork,请求信息在ALL中是所有的请求信息,JS是通过发送的JS请求得到数据,XHR是异步请求发送得到的数据
  • 3.查看返回数据的格式,确定爬取的方式

根据请求返回的数据的格式的不同确定具体的方式

  • 1.页面上都是通过JS请求发送数据,返回的格式可能有JSON、HTML、不规则的数据
  • 2.对于JSON数据可以采用JSON包进行解析
  • 3.对于HTML可以采用BeautifulSoup和lxml 的方式进行解析
  • 4.对于不规则的数据如果含有html 可以处理成HTML形式的数据进行解析,也可以采用re正则匹配的方式进行解析

所用到的Python包

import re
import requests
from bs4 import BeautifulSoup
from lxml import etree
import json
import csv
import pymysql
import time
import codecs

发送请求

"""发送请求返回解码后的response数据传递进去url得到解码后的返回数据一般是html数据Python 版本3.x
"""
def send_request(url):header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'}response = requests.get(url=url,headers=header)html_data = response.content.decode()return html_data

使用BeautifulSoup解析HTML数据

"""使用BeautifulSoup解析HTML数据传递进来HTLL解码后的数据返回soup对象
"""
def parse_html(html_data):soup = BeautifulSoup(html_data, "html.parser")for tag in soup.find_all('div', class_='jsearch-result-url'):print(str(tag))  # 得到标签整体的数据(包含标签)print(tag.text)  # 得到标签的数据(不包含标签)

使用lxml解析标签数据

可以在浏览器中在待获取的标签上面右键选择copy XPath进行获取到改表前对应的路径。

"""使用lxml解析标签数据
"""
def parse_html_lxml(html_data):all_data = etree.HTML(html_data)for each_data in all_data.xpath('//table/tr/td/text()'):print(each_data)

使用正则匹配解析数据

"""使用正则匹配解析数据匹配Json数组或者数组re.findall('\[{"title.*\]',data)
"""
def parse_regex(data):# 直接使用正则和findall进行匹配file_regex = 'filename=.*\.xlsx|filename=.*\.xls|filename=.*\.docx|filename=.*\.doc'mathces = re.findall(file_regex, data)print(mathces[0])# 编辑正则表达式使用search进行匹配pat = re.compile('var.*?{pages:(\d+),data:.*?')page_all = re.search(pat, data)print("page_all.group(1)" + page_all.group(1))

使用json包解析数据

"""加载Json形式的数据使用json包解析数据json.dumps() : 将字典转换成字符串json.loads() : 将字符串转换为字典json.dump()  : 写json数据到文件中json.load()  : 从json文件中读取数据字典类型的数据:dict = {"name":"tom"}字符串类型数据:str = '{"name":"tom"}'对于response为json数据的可以直接使用json.loads(response.text)按照json的层次进行解析
"""
def parse_json():dict_data = {"name": "tom"}str_data = '{"name":"tom"}'json_dict = json.loads(str_data)json_str = json.dumps(dict_data)print("json_dict 的类型是字段类型", "josn_str 的类型是字符串类型")

写入数据到csv文件

"""写入数据到csv文件中
"""
def save_as_csv(value1):# 使用csv的方式进行导入数据with open('{}.csv'.format("xxx"), 'a', encoding='utf_8_sig', newline='') as f:w = csv.writer(f)w.writerow(value1)

下载xsl/word 文件

"""下载xsl/word 文件访问连接地址进行保存
"""
def download_file(base_url, file_name):header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'}# 下载excel文件到本地并保存file_url = "http://xxx" + base_urlr = requests.get(file_url, headers=header)fp = open(file_name, "wb")fp.write(r.content)fp.close()

存储到MySQL数据库中

"""存储到MySQL数据库中
"""
def save_to_database(list):# 连接MYSQL数据库db = pymysql.connect(host='192.168.0xxx', user='xxx', password='xxx', db='xxx', port=3366,charset='utf8')print('连接数据库成功!')conn = db.cursor()  # 获取指针以操作数据库conn.execute('set names utf8')# 写入MYSQL数据库sql = "INSERT INTO xxx(UUID,XZQSZ_DM,NSBH,NSRC,FDXM,FRHM,SCDZ,NZT_MC,NST_DM,DH) VALUES(uuid(),%s,%s,%s,%s,%s,%s,%s,%s,%s)"conn.execute(sql, list)db.commit()  # 提交操作print('插入数据成功!')

使程序休眠

"""使程序休眠
"""
def sleep():# 休眠20秒time.sleep(20)

编解码

'''编解码response.content 得到的是ASCII码的数据response.text    得到的是str类型的数据\\u3000 编码情况采用ASCII码在线编解码  
'''
def encode_decode(response_data):decode_data = codecs.decode(response_data.encode(),'utf-8-sig')decode_data2 = codecs.decode(response_data.content,'utf-8-sig')decode_data3 = codecs.decode(response_data.text,'utf-8-sig')decode_data4 = codecs.decode(response_data.text.encode(),'utf-8-sig')decode_data5 = response_data.encode.decode('utf-8-sig')decode_data6 = response_data.content.decode('utf-8-sig')

结合使用re 、BeautifulSoup、lxml 字符串切割与替换以及数组灵活解析数据,
可用str(xxx)将数据转换成为字符串格式的数据

优化

可以采用一些爬虫框架来进行数据的抓取,比如 Scrapy、PySpider、Crawley等

更多推荐

Python 原生方法抓取数据

本文发布于:2023-07-28 20:15:58,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1298258.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:方法   数据   Python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!