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和Ruby中each循环引用变量问题(一个隐秘BUG?)
Jun 04 Python
Python编程中的反模式实例分析
Dec 08 Python
python操作gmail实例
Jan 14 Python
基于Python的XSS测试工具XSStrike使用方法
Jul 29 Python
Python基于Socket实现的简单聊天程序示例
Aug 05 Python
python2与python3中关于对NaN类型数据的判断和转换方法
Oct 30 Python
Python3.5模块的定义、导入、优化操作图文详解
Apr 27 Python
.dcm格式文件软件读取及python处理详解
Jan 16 Python
Python 读取位于包中的数据文件
Aug 07 Python
聊聊python中的循环遍历
Sep 07 Python
Python实现http接口自动化测试的示例代码
Oct 09 Python
一起来学习Python的元组和列表
Mar 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
与空气斗智斗勇的经典《Overlord》,传说中的“无稽之谈”
2020/04/09 日漫
php cache类代码(php数据缓存类)
2010/04/15 PHP
PHP垃圾回收机制引用计数器概念分析
2013/06/24 PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
2015/01/07 PHP
在PHP中使用FastCGI解析漏洞及修复方案
2015/11/10 PHP
AJAX使用了UpdatePanel后无法使用alert弹出脚本
2010/04/02 Javascript
基于jquery的点击链接插入链接内容的代码
2012/07/31 Javascript
jQuery操作checkbox选择(list/table)
2013/04/07 Javascript
Angular.js如何从PHP读取后台数据
2016/03/24 Javascript
JS中静态页面实现微信分享功能
2017/02/06 Javascript
JavaScript数组和对象的复制
2017/03/21 Javascript
纯js实现动态时间显示
2020/09/07 Javascript
基于zepto.js实现手机相册功能
2017/07/11 Javascript
基于jquery实现五星好评
2017/11/18 jQuery
详解在React.js中使用PureComponent的重要性和使用方式
2018/07/10 Javascript
在vue中使用SockJS实现webSocket通信的过程
2018/08/29 Javascript
使用Angular Cli如何创建Angular私有库详解
2019/01/30 Javascript
详解vue微信网页授权最终解决方案
2019/06/16 Javascript
javascript设计模式 ? 代理模式原理与用法实例分析
2020/04/16 Javascript
Python实现115网盘自动下载的方法
2014/09/30 Python
python列表生成式与列表生成器的使用
2018/02/23 Python
对Python中for复合语句的使用示例讲解
2018/11/01 Python
anaconda如何查看并管理python环境
2019/07/05 Python
Python+Selenium使用Page Object实现页面自动化测试
2019/07/14 Python
Python+OpenCV+图片旋转并用原底色填充新四角的例子
2019/12/12 Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
2020/04/29 Python
python 瀑布线指标编写实例
2020/06/03 Python
详解HTML5中rel属性的prefetch预加载功能使用
2016/05/06 HTML / CSS
Jo Malone美国官网:祖玛珑香水
2017/03/27 全球购物
复古风格的女装和装饰品:ModCloth
2017/12/29 全球购物
新加坡第一的杂货零售商:NTUC FairPrice
2020/12/05 全球购物
运动会稿件100字
2014/09/24 职场文书
Python中的min及返回最小值索引的操作
2021/05/10 Python
Mysql官方性能测试工具mysqlslap的使用简介
2021/05/21 MySQL
pandas求平均数和中位数的方法实例
2021/08/04 Python
深入理解mysql事务隔离级别和存储引擎
2022/04/12 MySQL