为什么BeautifulSoup无法从网页中提取所有HTML?

时间:2016-10-10 16:10:51

标签: python html python-3.x web-scraping beautifulsoup

我正在尝试从此网站提取文字:searchgurbani。这个网站有一些用英语和旁遮普语(印度语)逐行翻译的旧经文。它是一个非常好的平行语料库。我已在一个单独的文本文件中成功提取了所有英文翻译。但是当我去旁遮普时,它什么都没有。

这是Inspect元素截图:(突出显示的文字是翻译的旁遮普语)

Screenshot 1

在屏幕截图1中,属于 class = lang_16 的突出显示文本未列在汤对象 beautiful 中,该对象应包含所有HTML。这是Python代码:

outputFilePunjabi = open("1.txt","w",newline="",encoding="utf-16")
r=urlopen("")
beautiful = BeautifulSoup(r.read().decode('utf-8'),"html5lib")
#beautiful = BeautifulSoup(r.read().decode('utf-8'),"lxml")
punjabi_text = beautiful.find_all(class_="lang_16")
for i in punjabi_text:
  outputFilePunjabi.write(i.get_text())
  outputFilePunjabi.write('\n')

如果我使用 class_ = lang_4 运行相同的代码,则可以正常工作。

请执行以下操作以查看inspect元素中的lang_16:

请在该网页上执行以下操作:转到偏好设置 - > Tick"翻译Sri Guru Granth Sahib ji(由S. Manmohan Singh饰演) - 旁遮普语"根据Guru Granth Shahib提供的其他翻译: - >向下滚动 - 提交更改 - >重新打开页面

请指导我出错的地方。

(python version = 3.5)

PS:我在网络报废方面的经验非常少。

1 个答案:

答案 0 :(得分:2)

请记住,您已建议执行以下操作:

  

请在该网页上执行以下操作:转到偏好设置 - >蜱   “Sri Guru Granth Sahib ji的翻译(由S. Manmohan Singh提供) -   旁遮普语“根据Guru Granth提供的附加翻译   Shahib: - >向下滚动 - 提交更改

现在,在Python中下载页面时也需要这样做。换句话说,使用requests设置lang_16="yes" Cookie 以启用旁遮普语翻译:

import requests
from bs4 import BeautifulSoup


with requests.Session() as session:
    response = session.get("https://www.searchgurbani.com/guru_granth_sahib/ang_by_ang", cookies={
        "lang_16": "yes"
    })
    soup = BeautifulSoup(response.content, "html5lib")
    for item in soup.select(".lang_16"):
        print(item.get_text())

打印:

ਵਾਹਿਗੁਰੂ ਕੇਵਲ ਇਕ ਹੈ। ਸੱਚਾ ਹੈ ਉਸ ਦਾ ਨਾਮ, ਰਚਨਹਾਰ ਉਸ ਦੀ ਵਿਅਕਤੀ ਅਤੇ ਅਮਰ ਉਸ ਦਾ ਸਰੂਪ। ਉਹ ਨਿਡਰ, ਕੀਨਾ-ਰਹਿਤ, ਅਜਨਮਾ ਤੇ ਸਵੈ-ਪ੍ਰਕਾਸ਼ਵਾਨ ਹੈ। ਗੁਰਾਂ ਦੀ ਦਯਾ ਦੁਆਰਾ ਉਹ ਪਰਾਪਤ ਹੁੰਦਾ ਹੈ।
ਉਸ ਦਾ ਸਿਮਰਨ ਕਰ।
ਪਰਾਰੰਭ ਵਿੱਚ ਸੱਚਾ, ਯੁਗਾਂ ਦੇ ਸ਼ੁਰੂ ਵਿੱਚ ਸੱਚਾ,
ਅਤੇ ਸੱਚਾ ਉਹ ਹੁਣ ਭੀ ਹੈ, ਹੇ ਨਾਨਕ! ਨਿਸਚਿਤ ਹੀ, ਉਹ ਸੱਚਾ ਹੋਵੇਗਾ।
...
ਕਈ ਇਕ ਗਾਇਨ ਕਰਦੇ ਹਨ ਕਿ ਵਾਹਿਗੁਰੂ ਪ੍ਰਾਣ ਲੈ ਲੈਂਦਾ ਹੈ ਤੇ ਮੁੜ ਵਾਪਸ ਦੇ ਦਿੰਦਾ ਹੈ।
ਕਈ ਗਾਇਨ ਕਰਦੇ ਹਨ ਕਿ ਹਰੀ ਦੁਰੇਡੇ ਮਲੂਮ ਹੁੰਦਾ ਅਤੇ ਸੁੱਝਦਾ ਹੈ।