鱼C论坛

 找回密码
 立即注册
查看: 1848|回复: 16

[已解决]python正则表达式如何写网址

[复制链接]
发表于 2017-4-11 13:18:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
(ˇ&#717;ˇ) 想爬取这个链接<a href="/index.php/news/dynamic.html?start=60" title="4">4</a>
用正则表达式不会写,<a href="/index.php/news/dynamic.html?start=都是不变的,只有后面的60数字是会变改变的。
哪个大神会写,帮助一下,万分感谢,在线等
最佳答案
2017-4-11 14:16:50
本帖最后由 gopythoner 于 2017-4-11 14:18 编辑
moneyzld 发表于 2017-4-11 14:13
”/index.php/news/dynamic.html?start=”不变,数字有很多不同的
你上面提到的找出来的不对啊


数字随便变,我这个都能找到的,你大概是没看懂我这个的意思
我在k = re.findall('href="(.*?)"',f)[0]后面的[0]是我只获得找到的第一个
如果你要所有的这种链接的话,你就不需要这个地方
f代表的是你请求得到的网页源代码
直接k = re.findall('href="(.*?)"',f)就能得到整个网页中这种类型的链接,是一个列表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-4-11 13:20:15 | 显示全部楼层
求助求助,顶一下顶一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-11 14:00:08 | 显示全部楼层
这个挺简单的
  1. f = '''<a href="/index.php/news/dynamic.html?start=60" title="4">4</a>'''
  2. k = re.findall('href="(.*?)"',f)[0]
复制代码


结果
  1. /index.php/news/dynamic.html?start=60
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-11 14:13:44 | 显示全部楼层

”/index.php/news/dynamic.html?start=”不变,数字有很多不同的
你上面提到的找出来的不对啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-11 14:16:50 | 显示全部楼层    本楼为最佳答案   
本帖最后由 gopythoner 于 2017-4-11 14:18 编辑
moneyzld 发表于 2017-4-11 14:13
”/index.php/news/dynamic.html?start=”不变,数字有很多不同的
你上面提到的找出来的不对啊


数字随便变,我这个都能找到的,你大概是没看懂我这个的意思
我在k = re.findall('href="(.*?)"',f)[0]后面的[0]是我只获得找到的第一个
如果你要所有的这种链接的话,你就不需要这个地方
f代表的是你请求得到的网页源代码
直接k = re.findall('href="(.*?)"',f)就能得到整个网页中这种类型的链接,是一个列表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-11 14:27:47 | 显示全部楼层
gopythoner 发表于 2017-4-11 14:16
数字随便变,我这个都能找到的,你大概是没看懂我这个的意思
我在k = re.findall('href="(.*?)"',f)[0 ...

url = 'http://www.jiuzhai.com/index.php/news/dynamic.html'
r = requests.get(url)
f = r.text
k = re.findall('href="(.*?)"',f)
print(k)
你看我这样对吗,我试了,找到了很多其他的网站,我只需要”/index.php/news/dynamic.html?start=数字”这个形式的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-11 14:33:00 | 显示全部楼层
本帖最后由 gopythoner 于 2017-4-11 14:34 编辑
moneyzld 发表于 2017-4-11 14:27
url = 'http://www.jiuzhai.com/index.php/news/dynamic.html'
r = requests.get(url)
f = r.text


我知道了
你需要改成这样:
  1. k = re.findall('href="(/index.php/news/dynamic.html\?start=.*?)"',f)
复制代码


必须先定这种链接的格式是你说的前面这段不变的,否则就会找到很多无关的,这个改过的应该没问题了
顺便说一下,我改的这个可能你自己之前试过,但是没有找到的原因可能是因为这个链接中有个?,所以在写正则的时候要用\把这个?转义一下才行

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-11 14:35:22 | 显示全部楼层
gopythoner 发表于 2017-4-11 14:16
数字随便变,我这个都能找到的,你大概是没看懂我这个的意思
我在k = re.findall('href="(.*?)"',f)[0 ...

*?是什么含义?蟹蟹
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-11 14:38:14 | 显示全部楼层
gopythoner 发表于 2017-4-11 14:33
我知道了
你需要改成这样:

这次对了,谢谢
确实是这样,我原来写过的就是问号的问题,就一点差异,就是出不来
谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-11 14:39:53 | 显示全部楼层
sunnychou 发表于 2017-4-11 14:35
*?是什么含义?蟹蟹

.*?这个是正则里面用的最多的表达方式,你既然要爬网页,那这种基本的正则还是自己去弄清楚比较好,我跟你讲这一个点也没有多大意义
给你一个参考
http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
还有一个在线测试工具
http://tool.oschina.net/regex/#
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-4-11 16:43:07 | 显示全部楼层
gopythoner 发表于 2017-4-11 14:39
.*?这个是正则里面用的最多的表达方式,你既然要爬网页,那这种基本的正则还是自己去弄清楚比较好,我跟 ...

   
#创建excel文件,并按列导入
#C:\Users\Administrator\Desktop
# -*- coding: utf-8 -*-
def writer_excel():
    f = xlwt.Workbook(encoding = 'utf-8')#创建工作簿
    sheet = f.add_sheet('jzg')
    row0 = [u'人次',u'时间']
    column0 = column
    colimn1 = m2
#生成第一行
    for i in range(0,len(row0)):
        sheet.write(0,i,row0)
        
#生成第一列
    i,j = 1,0
    while i < len(column0) and j < len(column0):
        sheet.write_merge(i,i+1,0,0,column0[j])
        i += 1
        j += 1
#生成第二列
    i= 0
    while i <len(column0):
        for j in ranger(0,len(column1)):
            sheet.write(j+i+1,1,column[j])
        i += 1

        
    f.save('jzg.xls')

你能帮我看看我这出了什么问题吗,为什么我运行就是不能创建文件呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-11 16:54:09 | 显示全部楼层
moneyzld 发表于 2017-4-11 16:43
#创建excel文件,并按列导入
#C:%users\Administrator\Desktop
# -*- coding: utf-8 -*-

我并没有使用过excel的模块,你这个我不会
不过如果你要存储爬到的信息的话,我建议你用CSV文件存储,这个跟excel是一样的表格形式,但是存储数据的方式简单的太多,具体操作方式你自己去看吧,或者查看我之前传到论坛的爬虫代码也行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-12 09:22:25 | 显示全部楼层
gopythoner 发表于 2017-4-11 14:39
.*?这个是正则里面用的最多的表达方式,你既然要爬网页,那这种基本的正则还是自己去弄清楚比较好,我跟 ...


谢谢你,自己之前看过,但是实践的比较少,用起来还是有些生疏,.表示任意字符,*表示匹配0-n个,?是字符串结尾,我是放在一起比较懵逼,谢谢你,会再回顾一下,蟹蟹你给的资源
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-12 09:31:57 | 显示全部楼层
sunnychou 发表于 2017-4-12 09:22
谢谢你,自己之前看过,但是实践的比较少,用起来还是有些生疏,.表示任意字符,*表示匹配0-n个,?是 ...

你自己多去试试就知道了,其实我不怎么用正则表达式的,大概也就只会.*?和.*这2种用法,其他的不熟,每次需要用的时候都要去查看一下用法,但是我发现大部分我需要用到正则的地方只需要上面我说的2个就能解决,至于这2个的区别,你自己去弄清楚吧,自己多去试试就知道多个?的区别在哪里了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-12 10:54:51 | 显示全部楼层
gopythoner 发表于 2017-4-12 09:31
你自己多去试试就知道了,其实我不怎么用正则表达式的,大概也就只会.*?和.*这2种用法,其他的不熟,每次 ...

好的,么么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-19 16:27:27 | 显示全部楼层

为什么href没有匹配到呢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-19 16:44:02 | 显示全部楼层
zhangzaifang 发表于 2017-4-19 16:27
为什么href没有匹配到呢。

href是在正则提取的信息的括号外面的,所以匹配不到
这个正则的目的在于提取链接部分,href是不需要的所以没放在正则那个括号里面
你这个问题说明你对正则最基础的用法还没弄清楚,自己好好看看正则的基础用法吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-17 13:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表