gpt4 book ai didi

Python 原始字符串和 html 解析

转载 作者:太空宇宙 更新时间:2023-11-04 09:17:30 25 4
gpt4 key购买 nike

python 原始字符串和字符串文字如何工作?我正在尝试制作一个网络爬虫来从网站下载 pdf。当我搜索字符串时它有效,但是当我尝试在 python 中实现它时,我总是得到 None 作为我的答案

import urllib
import re
url="" //insert url here
sock=urllib.urlopen(url)
htmlSource=sock.read();
sock.close();

m=re.match(r"<a href.*?pdf[^>]*?", raw(htmlSource))
print m



$ python temp.py
None

原始函数来自这里:http://code.activestate.com/recipes/65211-convert-a-string-into-a-raw-string/

也就是说,我怎样才能完成这个程序,以便我可以打印出所有匹配项,然后下载 pdf 文件?

谢谢!

最佳答案

你似乎很困惑。

“字符串文字”是您在程序中键入的字符串。因为您的字符串需要有明确的开头和结尾,所以某些字符在字符串中间变得不方便,必须使用转义序列来表示它们。

Python 提供了“原始”字符串字面量,它们对转义序列的解释方式有不同的规则:相同的规则用于确定字符串的结束位置(所以一个反斜杠,后跟左引号字符,不会终止字符串),但是反斜杠之间的内容不会被转换。所以,虽然 '\''是一个由单引号字符组成的字符串(中间的 \' 是产生引号的转义序列),r'\''是由反斜杠和引号字符组成的字符串。

原始字符串字面值产生一个类型为str的对象.它与普通字符串文字产生的类型相同。这些通常用于正则表达式操作的模式,因为用于正则表达式的字符串通常需要包含很多反斜杠。如果您想编写一个与源文本中的反斜杠匹配的正则表达式,并且您没有原始字符串文字,那么您可能需要在源代码中的引号之间放置四个反斜杠:Python 编译器会将其解释为包含两个实际反斜杠的字符串,这又代表正则表达式语法中的“匹配反斜杠”。

您发现的函数是将转义序列重新引入输入文本的不完美尝试。 这不是你想做的,甚至没有任何意义,也不符合作者自己的规范。这似乎是基于与您自己相似的误解。字符串的“原始等价物”的概念是荒谬的。真的,没有“原始字符串”这样的东西;原始字符串 文字 可以方便地创建普通字符串。

您想搜索 htmlSource 内的模式.它已经是您需要的形式。您的问题与字符串转义无关当字符串来自用户输入、文件输入或除程序源之外的任何其他内容时,它不会像字符串文字那样处理,除非您明确安排要这样做。如果网页包含一个反斜杠后跟一个 n,即由 urllib 读取的字符串在相应的位置恰好包含 - 一个反斜杠后跟一个 n,而不是换行符。

问题如下:您想要搜索 字符串,如您所说:“当我搜索字符串时它起作用”。您当前正在匹配 字符串。请参阅文档:

Help on function match in module re:

match(pattern, string, flags=0)
Try to apply the pattern at the start of the string, returning
a match object, or None if no match was found.

您的模式没有出现在字符串的开头,因为网页的 HTML 不是以 <a> 开头的您正在寻找的标签。

你想要m=re.search(r"<a href.*?pdf[^>]*?", htmlSource) .

关于Python 原始字符串和 html 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7238204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com