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服务器与android客户端socket通信实例
Nov 12 Python
Python中的ConfigParser模块使用详解
May 04 Python
NumPy 如何生成多维数组的方法
Feb 05 Python
python PyTorch预训练示例
Feb 11 Python
python爬虫面试宝典(常见问题)
Mar 02 Python
python实战之实现excel读取、统计、写入的示例讲解
May 02 Python
python将秒数转化为时间格式的实例
Sep 16 Python
浅谈python标准库--functools.partial
Mar 13 Python
pandas实现将日期转换成timestamp
Dec 07 Python
python 实现线程之间的通信示例
Feb 14 Python
Pycharm2020.1安装中文语言插件的详细教程(不需要汉化)
Aug 07 Python
如何用tempfile库创建python进程中的临时文件
Jan 28 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
新浪新闻小偷
2006/10/09 PHP
PHP 简易输出CSV表格文件的方法详解
2013/06/20 PHP
php图像处理类实例
2015/07/28 PHP
Laravel中的Auth模块详解
2017/08/17 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
php用xpath解析html的代码实例讲解
2019/02/14 PHP
js图片延迟技术一般的思路与示例
2014/03/20 Javascript
jQuery中:not选择器用法实例
2014/12/30 Javascript
nodejs实现bigpipe异步加载页面方案
2016/01/26 NodeJs
Eclipse编辑jsp、js文件时卡死现象的解决办法汇总
2016/02/02 Javascript
jQuery mobile的header和footer在点击屏幕的时候消失的解决办法
2016/07/01 Javascript
深入学习 JavaScript中的函数调用
2017/03/23 Javascript
浅谈vue中数据双向绑定的实现原理
2017/09/14 Javascript
vue-cli 自定义指令directive 添加验证滑块示例
2017/10/19 Javascript
图文介绍Vue父组件向子组件传值
2018/02/17 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
2018/08/17 Javascript
深入浅析ng-bootstrap 组件集中 tabset 组件的实现分析
2019/07/19 Javascript
[44:10]2018DOTA2亚洲邀请赛 4.5 淘汰赛 EG vs VP 第一场
2018/04/06 DOTA
[09:13]DOTA2-DPC中国联赛 正赛 Ehome vs Magma 选手采访 1月19日
2021/03/11 DOTA
Python 内置函数complex详解
2016/10/23 Python
numpy判断数值类型、过滤出数值型数据的方法
2018/06/09 Python
wxPython实现画图板
2020/08/27 Python
Django使用Celery加redis执行异步任务的实例内容
2020/02/20 Python
Python实现Wordcloud生成词云图的示例
2020/03/30 Python
python exit出错原因整理
2020/08/31 Python
python 解决pycharm运行py文件只有unittest选项的问题
2020/09/01 Python
党员岗位承诺书
2014/03/25 职场文书
2014年党的群众路线教育实践活动总结
2014/04/25 职场文书
青安岗事迹材料
2014/05/14 职场文书
2015年销售员工作总结范文
2015/04/07 职场文书
民事撤诉申请书范本
2015/05/18 职场文书
小孩不笨观后感
2015/06/03 职场文书
田径运动会通讯稿
2015/07/18 职场文书
医务人员医德医风心得体会
2016/01/25 职场文书
2019脱贫攻坚工作总结报告范本!
2019/08/06 职场文书
大学校园餐饮创业计划书
2019/08/07 职场文书