精品技术论坛

精品技术论坛 (https://bbs.et8.net/bbs/index.php)
-   『软件使用』 (https://bbs.et8.net/bbs/forumdisplay.php?f=17)
-   -   【求助】如何用VBA或其他(例如Python)获取文本中特定字符? (https://bbs.et8.net/bbs/showthread.php?t=1366768)

netsonic 2019-01-19 20:26:50

【求助】如何用VBA或其他(例如Python)获取文本中特定字符?
 
1 个附件
要获取的字符是以“https://v.qq.com/x/page/”,开始的网址
例如:“https://v.qq.com/x/page/n08227d6av4.html”

有个问题,每个这样的网址在文本里会出现两次,但结果只要一个,每个网址一行,不要引号。

hefish 2019-01-19 20:43:31

用正则匹配一下,应该可以吧。

antony 2019-01-19 21:35:33

正则。。。。

<strong.*?href="(https://v.qq.com/x/page/.*?.html)"

取获取的值的group[1]

aspirer 2019-01-19 23:54:36

代码丑一点,凑合先用一下吧. 已去重复的URL
python

代码:

import re

txt=r"G:\\TEMP\网页源码.TXT"
with open(txt) as f:
    url_list=[]
    for line in f:
        urls =  re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', line)
        if urls:
            urls=[x for x in urls if 'https://v.qq.com/x/page/' in x]
            url_list.extend(urls)
    print(list(set(url_list)))
   
    #要一行一个再用下面的打印下
    for x in url_list:
        print(x)


netsonic 2019-01-20 10:12:30

2 个附件
引用:

作者: aspirer (文章 17291143)
代码丑一点,凑合先用一下吧. 已去重复的URLpython[CODE]import retxt=r"G:\\TEMP\网页源码.TXT"with open(txt) as f: url_list=[] for line in f: urls = re.findall('h......

网页源码.TXT放在F盘根目录下,
Python 3.7.1 IDLE打开code.py,没反应啊。

dodowolf 2019-01-20 13:47:53

引用:

作者: netsonic (文章 17291232)
网页源码.TXT放在F盘根目录下,
Python 3.7.1 IDLE打开code.py,没反应啊。

菜单 Run->Run Module

netsonic 2019-01-20 18:27:43

引用:

作者: dodowolf (文章 17291278)
菜单 Run->Run Module

Traceback (most recent call last):
File "F:\code.py", line 6, in <module>
for line in f:
UnicodeDecodeError: 'gbk' codec can't decode byte 0xbf in position 2: illegal multibyte sequence

dodowolf 2019-01-21 12:00:34

1 个附件
引用:

作者: netsonic (文章 17291344)
Traceback (most recent call last):
File "F:\code.py", line 6, in <module>
for line in f:
UnicodeDecodeError: 'gbk' codec can't decode byte 0xbf in positio...

代码:

package main

import (
        "bufio"
        "fmt"
        "log"
        "os"
        "strings"
)

func main() {
        var filePath string;
        pattern := "https://v.qq.com/x/page/"
        if len(os.Args) > 1 {
                filePath = os.Args[1]
        }
        if len(os.Args) > 2 {
                pattern = os.Args[2]
        }
        if len(filePath) == 0 {
                fmt.Println("No file path specified")
                return
        }

        fFile, err := os.Open(filePath)
        if err != nil {
                panic(err)
        }
        defer fFile.Close()

        scanner := bufio.NewScanner(fFile)
        urls := map[string]struct{}{}

        for scanner.Scan() {
                text := scanner.Text()
                if pos:=strings.Index(text, pattern); pos > 0 {
                        endpos := strings.Index(text[pos:], "\"")
                        url := text[pos:pos+endpos]
                        if _, ok := urls[url]; !ok {
                                fmt.Println(url)
                                urls[url] = struct{}{}
                        }
                }
        }

        if err := scanner.Err(); err != nil {
                log.Fatal(err)
        }

}

extracturl 文件名 <可选的 前缀>

aspirer 2019-01-22 22:41:45

引用:

作者: netsonic (文章 17291232)
网页源码.TXT放在F盘根目录下,
Python 3.7.1 IDLE打开code.py,没反应啊。

我这一切正常啊。

可能1是头部我没有加。
2有可能是文件编码问题。
先加上头部 # -*- coding: utf-8 -*-试试。
不行,就 加上 encoding='gbk'
即那一行换成 with open(txt,encoding='gbk') as f:

代码:

# -*- coding: utf-8 -*-
"""
Created on Sat Jan 19 23:31:51 2019

@author: aspirer
"""

import re

txt=r"G:\\TEMP\网页源码.TXT"
with open(txt) as f:
    url_list=[]
    for line in f:
        urls =  re.findall('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', line)
        if urls:
            urls=[x for x in urls if 'https://v.qq.com/x/page/' in x]
            url_list.extend(urls)
    #print(list(set(url_list)))

    #要一行一个用下面的打印
    for x in url_list:
        print(x)



所有时间均为北京时间, 现在的时间是 15:46:19.

本论坛带宽由迅通网络提供
SSL证书由TrustAsia提供

Copyright © 2000 - 2019 ClassiClub Forum All Rights Reserved.
粤ICP备09123456号