方法抓取数据"/>
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 原生方法抓取数据
发布评论