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 相关文章推荐
剖析Django中模版标签的解析与参数传递
Jul 21 Python
Python标准库06之子进程 (subprocess包) 详解
Dec 07 Python
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
Jun 15 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
Apr 21 Python
python对list中的每个元素进行某种操作的方法
Jun 29 Python
python3 读取Excel表格中的数据
Oct 16 Python
Python 写入训练日志文件并控制台输出解析
Aug 13 Python
浅析PyTorch中nn.Linear的使用
Aug 18 Python
Django中密码的加密、验密、解密操作
Dec 19 Python
使用Python实现将多表分批次从数据库导出到Excel
May 15 Python
Jupyter Notebook添加代码自动补全功能的实现
Jan 07 Python
基于Python 函数和方法的区别说明
Mar 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学习教程之第2天
2008/06/15 PHP
apache2.2.4+mysql5.0.77+php5.2.8安装精简
2009/04/29 PHP
PHP函数篇之掌握ord()与chr()函数应用
2011/12/05 PHP
PHP使用header()输出图片缓存实例
2014/12/09 PHP
Laravel 5框架学习之用户认证
2015/04/09 PHP
php的闭包(Closure)匿名函数初探
2016/02/14 PHP
Javascript在IE或Firefox下获取鼠标位置的代码
2009/12/18 Javascript
jquery eval解析JSON中的注意点介绍
2013/08/23 Javascript
JavaScript三元运算符的多种使用技巧
2015/04/16 Javascript
jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结
2015/12/24 Javascript
第一篇初识bootstrap
2016/06/21 Javascript
AngularJS 模块详解及简单实例
2016/07/28 Javascript
jQuery简单实现页面元素置顶时悬浮效果示例
2016/08/01 Javascript
jQuery序列化表单成对象的简单实现
2016/11/29 Javascript
angularjs点击图片放大实现上传图片预览
2017/02/24 Javascript
NodeJS链接MySql数据库的操作方法
2017/06/27 NodeJs
Vue Socket.io源码解读
2018/02/07 Javascript
关于layui的动态图标不显示的解决方法
2019/09/04 Javascript
VsCode里的Vue模板的实现
2020/08/12 Javascript
python之wxPython应用实例
2014/09/28 Python
python实现实时监控文件的方法
2016/08/26 Python
详解appium+python 启动一个app步骤
2017/12/20 Python
NumPy 数学函数及代数运算的实现代码
2018/07/18 Python
Python3爬虫学习之MySQL数据库存储爬取的信息详解
2018/12/12 Python
python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例
2020/03/02 Python
Python xlrd/xlwt 创建excel文件及常用操作
2020/09/24 Python
如何使用 Flask 做一个评论系统
2020/11/27 Python
Python如何实现感知器的逻辑电路
2020/12/25 Python
css 省略号 css3让多余的字符串消失并附加省略号的实现代码
2013/02/07 HTML / CSS
html5组织文档结构_动力节点Java学院整理
2017/07/11 HTML / CSS
Solid & Striped官网:美国泳装品牌
2019/06/19 全球购物
美国折扣香水网站:The Perfume Spot
2020/12/12 全球购物
上海中网科技笔试题
2012/02/19 面试题
防暑降温通知书
2015/04/27 职场文书
企业安全生产规章制度
2015/08/06 职场文书
各国货币符号大全
2022/02/17 杂记