Buryool 发表于 2022-8-5 08:47:56

Python爬虫相关基础问题

Python爬虫相关内容
代码在下方,为什么上面那种写法的运行结果不会带有'<a href="xxxx">'两边的内容呢?而只是找出了其中的网址。findLink变量中存储的是正则表达式模板,findall函数在查找的时候不应该是按照正则表达式将其全部查找出来吗?为什么只有网址呢?
在下方还有两行测试代码,如果不加双引号和网址的正则表达式,则可以查找出'<a href=',这是为什么呢?findall函数的使用有什么注意事项吗?
import re

# 模板
# findLink = re.compile(r'<a href="(.*?)">')
# 输出:https://movie.douban.com/subject/1292052/

findLink = re.compile(r'<a href=')
# 输出:<a href=

# 查找对象
item = r'<a href="https://movie.douban.com/subject/1292052/">dfsafdsafdsa'

# 查找
link = re.findall(findLink, item)
print(link)

cflying 发表于 2022-8-5 08:47:57

re.findall('href=\".*\/">', item)这种就带前后
re.findall('href=\"(.*)\/">', item)这种就不带前后
加了()就有输出限定了

liuzhengyuan 发表于 2022-8-5 09:33:38

给个完整版

wp231957 发表于 2022-8-5 10:36:03

如果网络允许静态爬虫的话,那么正则明显不如xpath有优势

南归 发表于 2022-8-5 22:31:50

第四行(.*?),所以输出的是这个括号里的内容,第七行是去找<a href=

Buryool 发表于 2022-8-5 23:54:38

南归 发表于 2022-8-5 22:31
第四行(.*?),所以输出的是这个括号里的内容,第七行是去找

意思是说像这样用正则表达式匹配查找的时候,如果正则表达式里面有括号的话就找和括号里匹配的内容;如果正则表达式里面没有括号,再找其他的内容。原理是这样吗?{:9_241:}

liuzhengyuan 发表于 2022-8-6 02:58:17

本帖最后由 liuzhengyuan 于 2022-8-6 10:34 编辑

Buryool 发表于 2022-8-5 23:54
意思是说像这样用正则表达式匹配查找的时候,如果正则表达式里面有括号的话就找和括号里匹配的内容;如果 ...

可以参考:https://hankchow.github.io/2018/08/11/a-pitfall-of-re-findall-with-brackets-in-Python/
如果不想匹配括号可以可以把 "?:" 加在第一个括号后面

cflying 发表于 2022-8-6 21:53:07

re.findall('href=\"(.*)\/">', item)
输出['https://movie.douban.com/subject/1292052']
<a href="(.*?)">写法直白点讲就是匹配并且只显示.*这部分,再直白说就是先匹配出<a href="到">之间的内容,然后只输出()里匹配的内容,如果不加()则显示完整的<a到>

re.findall('href=\".*\/">', item)
输出['href="https://movie.douban.com/subject/1292052/">']

cflying 发表于 2022-8-6 21:54:45

显示全部还是只显示链接,是是否有()决定的,没有()则显示所有,有()则根据()前后内容匹配但只输出()内的内容

cflying 发表于 2022-8-6 21:56:56

Buryool 发表于 2022-8-5 23:54
意思是说像这样用正则表达式匹配查找的时候,如果正则表达式里面有括号的话就找和括号里匹配的内容;如果 ...

你理解错了,是根据()前后内容查找,但是只输出()中匹配的部分

cflying 发表于 2022-8-6 22:03:26

另外提一句,要是元素清晰的话最好用css选择器,使用起来比正则轻松多了

Buryool 发表于 2022-8-7 08:49:16

cflying 发表于 2022-8-5 08:47


懂了懂了!太感谢了!!

Buryool 发表于 2022-8-7 08:50:37

liuzhengyuan 发表于 2022-8-6 02:58
可以参考:https://hankchow.github.io/2018/08/11/a-pitfall-of-re-findall-with-brackets-in-Python/ ...

已解决!非常感谢!!
页: [1]
查看完整版本: Python爬虫相关基础问题