authors = re.findall('<p class ="source">.*?<img.*?alt="(.*?)">', content, re.DOTALL)我这个为什么爬取不到
时间: 2024-11-25 20:12:31 浏览: 11
你提供的正则表达式 `authors = re.findall('<p class ="source">.*?<img.*?alt="(.*?)">', content, re.DOTALL)` 的目的是从包含HTML内容的 `content` 中找到 `<p class="source">` 元素内的 `alt` 属性值。看起来有以下几个可能的问题:
1. **引号问题**:在正则表达式中,方括号 (`[]`) 指的是字符集,而双引号 (`"` 或 `'`) 需要转义。应将 `"()"` 改成 `\(".*?"\)` 来匹配双引号里的内容。
2. **贪婪匹配**:`.*?` 是贪婪匹配,可能会匹配过多直到遇到下一个非贪婪模式或结束符。如果你只想获取 `alt` 属性前的部分,去掉 `.*?` 可能会更合适。
3. **DOM结构**:`<p>` 和 `<img>` 后面可能还有其他内容,`.*?` 可能会捕获整个段落甚至更多。如果`<p>`后面紧接着就是`<img>`标签,那么需要确保正则能够精确地定位。
修正后的正则表达式可能是这样:
```python
authors = re.findall('<p class="source">(.*?)<img.*?alt="(.*?)">(.*?</p>|)', content, re.DOTALL)
```
这版本包含了两个捕获组,第一个捕捉 `<p>` 到 `alt` 之间的内容,第二个捕捉 `alt` 的值。注意这里还添加了 `(.*?</p>|)`,用于匹配`<p>`标签的结束或者之后的内容,如果没有`<p>`,则匹配到文档结尾。
如果你还是无法获取到预期结果,可能需要检查 `content` 是否确实包含了符合正则的HTML结构,并确保页面编码正确。同时,如果`<p class="source">`不是始终紧跟在`<img>`前面,这个正则可能就不适用了。如果需要更复杂的选择器,最好使用像BeautifulSoup这样的HTML解析库。
阅读全文