Python常用爬虫代码总结方便查询


Posted in Python onFebruary 25, 2019

beautifulsoup解析页面

from bs4 import BeautifulSoup
soup = BeautifulSoup(htmltxt, "lxml")
# 三种装载器
soup = BeautifulSoup("<a></p>", "html.parser")
### 只有起始标签的会自动补全,只有结束标签的会自动忽略
### 结果为:<a></a>
soup = BeautifulSoup("<a></p>", "lxml")
### 结果为:<html><body><a></a></body></html>
soup = BeautifulSoup("<a></p>", "html5lib")
### html5lib则出现一般的标签都会自动补全
### 结果为:<html><head></head><body><a><p></p></a></body></html>
# 根据标签名、id、class、属性等查找标签
### 根据class、id、以及属性alog-action的值和标签类别查询
soup.find("a",class_="title",id="t1",attrs={"alog-action": "qb-ask-uname"}))
### 查询标签内某属性的值
pubtime = soup.find("meta",attrs={"itemprop":"datePublished"}).attrs['content']
### 获取所有class为title的标签
for i in soup.find_all(class_="title"):
  print(i.get_text())
### 获取特定数量的class为title的标签
for i in soup.find_all(class_="title",limit = 2):
  print(i.get_text())
### 获取文本内容时可以指定不同标签之间的分隔符,也可以选择是否去掉前后的空白。
soup = BeautifulSoup('<p class="title" id="p1"><b> The Dormouses story </b></p><p class="title" id="p1"><b>The Dormouses story</b></p>', "html5lib")
soup.find(class_="title").get_text("|", strip=True)
#结果为:The Dormouses story|The Dormouses story
### 获取class为title的p标签的id
soup.find(class_="title").get("id")
### 对class名称正则:
soup.find_all(class_=re.compile("tit"))
### recursive参数,recursive=False时,只find当前标签的第一级子标签的数据
soup = BeautifulSoup('<html><head><title>abc','lxml')
soup.html.find_all("title", recursive=False)

unicode编码转中文

content = "\u65f6\u75c7\u5b85"
content = content.encode("utf8","ignore").decode('unicode_escape')

url encode的解码与解码

from urllib import parse
# 编码
x = "中国你好"
y = parse.quote(x)
print(y)
# 解码
x = parse.unquote(y)
print(x)

html转义字符的解码

from html.parser import HTMLParser
htmls = "<div><p>"
txt = HTMLParser().unescape(htmls)
print(txt)  . # 输出<div><p>

base64的编码与解码

import base64
# 编码
content = "测试转码文本123"
contents_base64 = base64.b64encode(content.encode('utf-8','ignore')).decode("utf-8")
# 解码
contents = base64.b64decode(contents_base64)

过滤emoji表情

def filter_emoji(desstr,restr=''):
    try:
      co = re.compile(u'[\U00010000-\U0010ffff]')
    except re.error:
      co = re.compile(u'[\uD800-\uDBFF][\uDC00-\uDFFF]')
    return co.sub(restr, desstr)

完全过滤script和style标签

import requests
from bs4 import BeautifulSoup
soup = BeautifulSoup(htmls, "lxml")
for script in soup(["script", "style"]):  
  script.extract()
print(soup)

过滤html的标签,但保留标签里的内容

import re
htmls = "<p>abc</p>"
dr = re.compile(r'<[^>]+>',re.S)
htmls2 = dr.sub('',htmls)
print(htmls2)  #abc
正则提取内容(一般处理json)
rollback({
 "response": {
 "code": "0",
 "msg": "Success",
 "dext": ""
 },
 "data": {
 "count": 3,
 "page": 1,
 "article_info": [{
  "title": "“小库里”:适应比赛是首要任务 投篮终会找到节奏",
  "url": "http:\/\/sports.qq.com\/a\/20180704\/035378.htm",
  "time": "2018-07-04 16:58:36",
  "column": "NBA",
  "img": "",
  "desc": ""
 }, {
  "title": "首钢体育助力国家冰球集训队 中国冰球联赛年底启动",
  "url": "http:\/\/sports.qq.com\/a\/20180704\/034698.htm",
  "time": "2018-07-04 16:34:44",
  "column": "综合体育",
  "img": "",
  "desc": ""
 }...]
 }
})
import re
# 提取这个json中的每条新闻的title、url
# (.*?)为要提取的内容,可以在正则字符串中加入.*?表示中间省略若干字符
reg_str = r'"title":"(.*?)",.*?"url":"(.*?)"'
pattern = re.compile(reg_str,re.DOTALL)
items = re.findall(pattern,htmls)
for i in items:
  tilte = i[0]
  url = i[1]

时间操作

# 获取当前日期
today = datetime.date.today()
print(today)   #2018-07-05
# 获取当前时间并格式化
time_now = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time()))
print(time_now)   #2018-07-05 14:20:55
# 对时间戳格式化
a = 1502691655
time_a = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(int(a))) 
print(time_a)    #2017-08-14 14:20:55
# 字符串转为datetime类型
str = "2018-07-01 00:00:00"
datetime.datetime.strptime(st, "%Y-%m-%d %H:%M:%S")
# 将时间转化为时间戳
time_line = "2018-07-16 10:38:50"
time_tuple = time.strptime(time_line, "%Y-%m-%d %H:%M:%S")
time_line2 = int(time.mktime(time_tuple))
# 明天的日期
today = datetime.date.today()
tomorrow = today + datetime.timedelta(days=1)
print(tomorrow)   #2018-07-06
# 三天前的时间
today = datetime.datetime.today()
tomorrow = today + datetime.timedelta(days=-3)
print(tomorrow)   #2018-07-02 13:37:00.107703
# 计算时间差
start = "2018-07-03 00:00:00"
time_now = datetime.datetime.now()
b = datetime.datetime.strptime(start,'%Y-%m-%d %H:%M:%S')
minutes = (time_now-b).seconds/60
days = (time_now-b).days
all_minutes = days*24*60+minutes
print(minutes)   #821.7666666666667
print(days)   #2
print(all_minutes)   #3701.7666666666664

数据库操作

import pymysql
conn = pymysql.connect(host='10.0.8.81', port=3306, user='root', passwd='root',db='xxx', charset='utf8')
cur = conn.cursor()
insert_sql = "insert into tbl_name(id,name,age) values(%s,%s,%s)
id = 1
name = "like"
age = 26
data_list = []
data = (id,name,age)
# 单条插入
cur.execute(insert_sql,data)
conn.commit()
# 批量插入
data_list.append(data)
cur.executemany(insert_sql,data_list)
conn.commit()
#特殊字符处理(name中含有特殊字符)
data = (id,pymysql.escape_string(name),age)
#更新
update_sql = "update tbl_name set content = '%s' where id = "+str(id)
cur.execute(update_sql%(pymysql.escape_string(content)))
conn.commit()
#批量更新
update_sql = "UPDATE tbl_recieve SET content = %s ,title = %s , is_spider = %s WHERE id = %s"
update_data = (contents,title,is_spider,one_new[0])
update_data_list.append(update_data)
if len(update_data_list) > 500:
try:
  cur.executemany(update_sql,update_data_list) 
  conn.commit()

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
python模仿网页版微信发送消息功能
Feb 24 Python
Pycharm 创建 Django admin 用户名和密码的实例
May 30 Python
对pandas中时间窗函数rolling的使用详解
Nov 28 Python
python控制nao机器人身体动作实例详解
Apr 29 Python
python批量爬取下载抖音视频
Jun 17 Python
Pandas之排序函数sort_values()的实现
Jul 09 Python
浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
Jun 12 Python
python实现PDF中表格转化为Excel的方法
Jun 16 Python
Python3.8.2安装包及安装教程图文详解(附安装包)
Nov 28 Python
python 实现全球IP归属地查询工具
Dec 18 Python
用Python进行栅格数据的分区统计和批量提取
May 27 Python
linux中nohup和后台运行进程查看及终止
Jun 24 Python
Python使用paramiko操作linux的方法讲解
Feb 25 #Python
详解Django中CBV(Class Base Views)模型源码分析
Feb 25 #Python
Python判断对象是否相等及eq函数的讲解
Feb 25 #Python
详解django中url路由配置及渲染方式
Feb 25 #Python
利用python脚本如何简化jar操作命令
Feb 24 #Python
Python中如何使用if语句处理列表实例代码
Feb 24 #Python
python实现两张图片的像素融合
Feb 23 #Python
You might like
php rmdir使用递归函数删除非空目录实例详解
2016/10/20 PHP
php之可变函数的实例详解
2017/09/13 PHP
动态调用css文件——jquery的应用
2007/02/20 Javascript
js工具方法弹出蒙版
2013/05/08 Javascript
jQuery function的正确书写方法
2013/08/02 Javascript
javascript实现列表滚动的方法
2015/07/30 Javascript
使用jQuery5分钟快速搞定双色表格的简单实例
2016/08/08 Javascript
js 将图片连接转换成base64格式的简单实例
2016/08/10 Javascript
jQuery序列化表单成对象的简单实现
2016/11/29 Javascript
浅析Angular19 自定义表单控件
2018/01/31 Javascript
Vue修改mint-ui默认样式的方法
2018/02/03 Javascript
VUE + UEditor 单图片跨域上传功能的实现方法
2018/02/08 Javascript
详解vue-cli项目中怎么使用mock数据
2018/05/29 Javascript
微信小程序实现topBar底部选择栏效果
2018/07/20 Javascript
vue template中slot-scope/scope的使用方法
2018/09/06 Javascript
基于Vue实现平滑过渡的拖拽排序功能
2019/06/12 Javascript
微信小程序实现横向滚动导航栏效果
2019/12/12 Javascript
go语言计算两个时间的时间差方法
2015/03/13 Python
python 查找字符串是否存在实例详解
2017/01/20 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
2017/05/08 Python
关于Pycharm无法debug问题的总结
2019/01/19 Python
Python任意字符串转16, 32, 64进制的方法
2019/06/12 Python
scikit-learn线性回归,多元回归,多项式回归的实现
2019/08/29 Python
基于Python新建用户并产生随机密码过程解析
2019/10/08 Python
Django通过dwebsocket实现websocket的例子
2019/11/15 Python
Python while true实现爬虫定时任务
2020/06/08 Python
CSS3近阶段篇之酷炫的3D旋转透视
2016/04/28 HTML / CSS
运动会广播稿50字
2014/01/26 职场文书
《藏戏》教学反思
2014/02/11 职场文书
设计专业自荐信
2014/06/19 职场文书
反腐倡廉警示教育活动心得体会
2014/09/04 职场文书
工人先锋号申报材料
2014/12/29 职场文书
小学班主任工作总结2015
2015/04/07 职场文书
redis限流的实际应用
2021/04/24 Redis
python3+PyQt5+Qt Designer实现界面可视化
2021/06/10 Python
html中两种获取标签内的值的方法
2022/06/10 HTML / CSS