python - 我如何刮掉介绍部分中的文字
问题描述
我正在尝试在介绍部分下抓取文本,但似乎得到 a"[]"
作为输出
代码是:
import requests
import bs4
import lxml
import html5lib
from bs4 import BeautifulSoup
import re
result=requests.get("https://www.1mg.com/drugs/augmentin-625-duo-tablet-138629")
soup = bs4.BeautifulSoup(result.text,"lxml")
intro=soup.find(text=re.compile('Introduction')).parent.parent.find_all('div', attrs={"class": "DrugOverview__content___22ZBX"})
print(intro)
我正在 sublime 文本编辑器上编写代码并在 git bash 上运行它
PS:请尝试解释如何解决此问题,因为我是网络抓取的菜鸟,似乎还没有掌握它的窍门……谢谢
解决方案
我发现这个页面检查标题User-Agent
- 也许它HTML
为不同的设备(手机、平板电脑、笔记本电脑)生成不同的。
但它不能简单Mozilla/5.0
——它必须User-Agent
来自真正的网络浏览器。
您可以User-Agent
在https://httpbin.org/get上看到您的- 此页面对于测试脚本发送到服务器的内容很有用。
这段代码对我有用。
import requests
from bs4 import BeautifulSoup
headers = {
"User-Agent":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:84.0) Gecko/20100101 Firefox/84.0"
}
url = "https://www.1mg.com/drugs/augmentin-625-duo-tablet-138629"
result = requests.get(url, headers=headers)
soup = BeautifulSoup(result.text, "lxml")
intro = soup.find(text='Introduction').parent.parent.find('div', {"class": "DrugOverview__content___22ZBX"})
text = intro.get_text(strip=True)
print(text)
推荐阅读
- python - 我试图在函数中返回一个随机生成的数字,这样我就可以用它做一些数学运算
- sql - 图形或关系数据库更适合这种树结构?
- azure - 通过 Azure 逻辑应用中的循环传递文件路径
- arrayfire - Arrayfire:如何通过另一个数组的元素对数组进行采样?
- assembly - 用该行的功能注释复制循环的每一行
- javascript - 如何在 ReactJS 的三元运算符中使用 OR 条件
- visual-studio - 是否可以使用 Visual Studio 进行 MS Dynamics 365 性能测试?
- google-sheets - 如何将条件格式应用于命名范围?
- amazon-web-services - 无法从 aws 组织中删除用户
- java - ArrayAdapter 无法正常工作,仅显示 1 项