Python解析、提取url关键字的实例详解


Posted in Python onDecember 17, 2018

解析url用的类库:

python2版本:

from urlparse import urlparse
import urllib

python3版本:

from urllib.parse import urlparse
import urllib.request

研究了不同的url规则发现:只要在搜索关键字是用=嫁接的,查询的关键在解析后的query里

如果不是用=嫁接,查询的关键在解析后的path里。

解析的规则都是一样的,正则如下:(6中不同情况的组合)

另外host为‘s.weibo.com'的url编码与其他不同要另做处理。

代码如下:有些网站的规则还不是很清楚,需要花大量时间找规则,规则越清晰,关键字就越清楚,如下规则已适合绝大部分网站,酌情参考。

# -*- coding:utf-8 -*-
 
from urlparse import urlparse
import urllib
import re
 
# url
source_txt = "E:\\python_Anaconda_code\\url.txt"
# 规则
regular = r'(\w+(%\w\w)+\w+|(%\w\w)+\w+(%\w\w)+|\w+(%\w\w)+|(%\w\w)+\w+|(%\w\w)+|\w+)'
 
# 存放关键字
kw_list = list()
 
# key为要研究网站的host,value为关键字的嫁接标识符
dict = {
 "www.baidu.com": "wd=",
 "news.baidu.com": "word=",
 "www.sogou.com": "query=",
 "tieba.baidu.com": "kw=",
 "wenku.baidu.com": "word=",
 "music.sina.com.cn": "k=",
 "www.haosou.com": "q=",
 "www.lagou.com": "list_",
 "www.chunyuyisheng.com": "query=",
 "s.weibo.com": "weibo/"
}
 
def Main():
 with open(source_txt, 'r') as f_source_txt:
  for url in f_source_txt:
   host = url.split("//")[1].split("/")[0]
   if host in dict:
    flag = dict[host]
    if flag.find("=") != -1:
     query = urlparse(url).query.replace('+', '')
     kw = re.search(flag + regular, query, re.I) # .group(0)
     if kw:
      kw = urllib.unquote(kw.group(0).split(flag)[1])
      print(kw)
    else:
     path = urlparse(url).path.replace('+', '')
     kw = re.search(flag + regular, path.replace("%25", "%"), re.I)
     if kw:
      kw = urllib.unquote(kw.group(0).split(flag)[1])
      print(kw)
if __name__ == '__main__':
 Main()

url.txt的内容如下:

https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&ch=&tn=baidu&bar=&wd=python&rn=&oq=&rsv_pq=ece0867c0002c793&rsv_t=edeaQq7DDvZnxq%2FZVra5K%2BEUanlTIUXhGIhvuTaqdfOECLuXR25XKDp%2Bi0I&rqlang=cn&rsv_enter=1&inputT=218
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&ch=&tn=baidu&bar=&wd=python%E9%87%8C%E7%9A%84%E5%AD%97%E5%85%B8dict&oq=python&rsv_pq=96c160e70003f332&rsv_t=0880NkOvMIr3TvOdDP1t8EbloD8qwr4yeP6CfPjQihQNNhdExfuwyOFMrx0&rqlang=cn&rsv_enter=0&inputT=10411 
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&ch=&tn=baidu&bar=&wd=python%E9%87%8C%E7%9A%84urlprese&oq=python%25E9%2587%258C%25E7%259A%2584re%25E9%2587%258C%25E7%259A%2584%257C%25E6%2580%258E%25E4%25B9%2588%25E7%2594%25A8&rsv_pq=d1d4e7b90003d391&rsv_t=5ff4Vok4EELK1PgJ4oSk8L0VvKAn51%2BL8ns%2FjSubexg7Lb7znKcTvnVtn8M&rqlang=cn&rsv_enter=1&inputT=2797 
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&ch=&tn=baidu&bar=&wd=python++wo+%E7%88%B1urlprese&oq=python%25E9%2587%258C%25E7%259A%2584urlprese&rsv_pq=eecf45e900033e87&rsv_t=1c70xAYhrvw5JOZA7lpVgt4pw%2BW1TO8hqTejTh67JgEQfqAGyDydd25HAmU&rqlang=cn&rsv_enter=0&inputT=10884 
http://news.baidu.com/ns?word=%E8%B6%B3%E7%90%83&tn=news&from=news&cl=2&rn=20&ct=1 
http://news.baidu.com/ns?ct=1&rn=20&ie=utf-8&bs=%E8%B6%B3%E7%90%83&rsv_bp=1&sr=0&cl=2&f=8&prevct=no&tn=news&word=++++++%E8%B6%B3++%E7%90%83+++++%E4%BD%A0%E5%A5%BD+%E5%98%9B%EF%BC%9F&rsv_sug3=14&rsv_sug4=912&rsv_sug1=4&inputT=8526 
http://tieba.baidu.com/f?ie=utf-8&kw=%E7%BA%A2%E6%B5%B7%E8%A1%8C%E5%8A%A8&fr=search&red_tag=q0224393377 
https://www.sogou.com/web?query=ni+zai+%E6%88%91+%E5%BF%83li&_asf=www.sogou.com&_ast=1520388441&w=01019900&p=40040100&ie=utf8&from=index-nologin&s_from=index&sut=9493&sst0=1520388440692&lkt=8%2C1520388431200%2C1520388436842&sugsuv=1498714959961744&sugtime=1520388440692 
https://www.lagou.com/jobs/list_python%E5%A4%A7%E6%95%B0%E6%8D%AEmr?labelWords=&fromSearch=true&suginput= 
https://www.chunyuyisheng.com/pc/search/?query=%E6%85%A2%E6%80%A7%E4%B9%99%E8%82%9D% 
http://s.weibo.com/weibo/%25E5%2594%2590%25E4%25BA%25BA%25E8%25A1%2597%25E6%258E%25A2%25E6%25A1%25882&Refer=index
http://s.weibo.com/weibo/%25E4%25BD%25A0%25E5%25A5%25BD123mm%2520%25E5%2597%25AF%2520mm11&Refer=STopic_box

结果如下:

Python解析、提取url关键字的实例详解

如果要研究其他host,可以加到字典dict里。

备注:以上代码和思路仅供参考,如有更好的方法敬请留言!

以上这篇Python解析、提取url关键字的实例详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 抓取微信公众号账号信息的方法
Jun 14 Python
详解10个可以快速用Python进行数据分析的小技巧
Jun 24 Python
python实现桌面托盘气泡提示
Jul 29 Python
python psutil模块使用方法解析
Aug 01 Python
解决Django后台ManyToManyField显示成Object的问题
Aug 09 Python
解决django同步数据库的时候app models表没有成功创建的问题
Aug 09 Python
python实现多进程按序号批量修改文件名的方法示例
Dec 30 Python
tensorflow实现测试时读取任意指定的check point的网络参数
Jan 21 Python
keras .h5转移动端的.tflite文件实现方式
May 25 Python
在tensorflow以及keras安装目录查询操作(windows下)
Jun 19 Python
Python select及selectors模块概念用法详解
Jun 22 Python
利用python+request通过接口实现人员通行记录上传功能
Jan 13 Python
Django Rest framework之认证的实现代码
Dec 17 #Python
python web自制框架之接受url传递过来的参数实例
Dec 17 #Python
Django Rest framework之权限的实现示例
Dec 17 #Python
Python3爬虫教程之利用Python实现发送天气预报邮件
Dec 16 #Python
Python Unittest根据不同测试环境跳过用例的方法
Dec 16 #Python
python使用插值法画出平滑曲线
Dec 15 #Python
python用fsolve、leastsq对非线性方程组求解
Dec 15 #Python
You might like
php中一个完整表单处理实现代码
2011/11/10 PHP
PHP中CURL方法curl_setopt()函数的参数分享
2013/01/19 PHP
Zend Guard使用指南及问题处理
2015/01/07 PHP
php并发加锁示例
2016/10/17 PHP
基于ThinkPHP5.0实现图片上传插件
2017/09/25 PHP
HTML5如何适配 iPhone IOS 底部黑条
2021/03/09 HTML / CSS
Javascript 日期对象Date扩展方法
2009/05/30 Javascript
javascript使用appendChild追加节点实例
2015/01/12 Javascript
JS组件系列之Bootstrap Icon图标选择组件
2016/01/28 Javascript
原生JS实现拖拽图片效果
2020/08/27 Javascript
浅谈js构造函数的方法与原型prototype
2016/07/04 Javascript
bootstrap fileinput 上传插件的基础使用
2017/02/17 Javascript
jQuery实现div跟随鼠标移动
2020/08/20 jQuery
Vue2.0中集成UEditor富文本编辑器的方法
2018/03/03 Javascript
JS实现可切换图片的幻灯切换效果示例
2019/05/24 Javascript
layui实现图片虚拟路径上传,预览和删除的例子
2019/09/25 Javascript
Threejs实现滴滴官网首页地球动画功能
2020/07/13 Javascript
Vue3为什么这么快
2020/09/23 Javascript
小程序中手机号识别的示例
2020/12/14 Javascript
python 实现文件的递归拷贝实现代码
2012/08/02 Python
使用Python中PDB模块中的命令来调试Python代码的教程
2015/03/30 Python
python 2.6.6升级到python 2.7.x版本的方法
2016/10/09 Python
python win32 简单操作方法
2017/05/25 Python
Python使用logging模块实现打印log到指定文件的方法
2018/09/05 Python
Python 爬取淘宝商品信息栏目的实现
2021/02/06 Python
如何用H5实现一个触屏版的轮播器的实例
2017/01/09 HTML / CSS
支票、地址标签、包装纸和慰问卡:Current Catalog
2018/01/30 全球购物
美国社交购物市场:MassGenie
2019/02/18 全球购物
写一个方法,输入一个文件名和一个字符串,统计这个字符串在这个文件中出现的次数
2016/04/13 面试题
迎新晚会策划方案
2014/06/13 职场文书
护理目标管理责任书
2014/07/25 职场文书
学习十八大的心得体会
2014/09/01 职场文书
公司捐书倡议书
2015/04/27 职场文书
品德与社会教学反思
2016/02/24 职场文书
mybatis使用oracle进行添加数据的方法
2021/04/27 Oracle
html中两种获取标签内的值的方法
2022/06/10 HTML / CSS