簡體   English   中英

如何從該網頁中抓取文本?

[英]How to scrape text from this webpage?

我正在嘗試抓取此 HTML 標題

<h2 id="p89" data-pid="89"><span id="page77" class="pageNum" data-no="77" data-before-text="77"></span>Tuesday, July&nbsp;30</h2>

從這個網站: https : //wol.jw.org/en/wol/h/r1/lp-e

我的代碼:

from bs4 import BeautifulSoup
import requests

url = requests.get('https://wol.jw.org/en/wol/h/r1/lp-e').text

soup = BeautifulSoup(url, 'lxml')

textodiario = soup.find('header')

dia = textodiario.h2.text
print(dia)

它應該返回我今天的一天,但它返回我過去的一天: Wednesday, July 24

目前我沒有要測試的 PC,請仔細檢查可能的錯誤。

您也需要適用於您的平台chromedriver ,將其放在腳本的同一文件夾中。

我的想法是使用 selenium 來獲取 HTML 然后解析它:

import time
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

url = "https://wol.jw.org/en/wol/h/r1/lp-e"
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
driver = webdriver.Chrome(chrome_options=options)
driver.get(url)
time.sleep(3)
page = driver.page_source
driver.quit()
soup = BeautifulSoup(page, 'html.parser')
textodiario = soup.find('header')
dia = textodiario.h2.text
print(dia)

數據正在異步加載並且 div 的內容正在更改。 你需要的是一個 selenium web 驅動程序來與 bs4 一起工作。 在此處輸入圖片說明

我實際上嘗試了你的代碼,網站/代碼獲取數據的方式肯定有問題。 因為當我將整個 URL 文本通過管道傳輸到七月的 grep 時,它會給出:

Wednesday, July 24
<h2 id="p71" data-pid="71"><span id="page75" class="pageNum" data-no="75" data-before-text="75"></span>Wednesday, July 24</h2>
<h2 id="p74" data-pid="74">Thursday, July 25</h2>
<h2 id="p77" data-pid="77">Friday, July 26</h2>

如果我不得不猜測,他們在 h2 下保留多個日期這一事實可能無濟於事,但我在網絡抓取方面的經驗幾乎為零。 如果你注意到了,7 月 30 日甚至不在那里,這意味着你的數據在這條線上的某個地方變得很奇怪(正如 LazyCoder 指出的那樣)。

希望 Selenium 可以解決您的問題。

轉到NetWork選項卡,您將獲得鏈接。

https://wol.jw.org/wol/dt/r1/lp-e/2019/7/30

這是代碼。

from bs4 import BeautifulSoup
headers = {'User-Agent':
        'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36'}
session = requests.Session()
response = session.get('https://wol.jw.org/wol/dt/r1/lp-e/2019/7/30',headers=headers)
result=response.json()
data=result['items'][0]['content']
soup=BeautifulSoup(data,'html.parser')
print(soup.select_one('h2').text)

輸出:

Tuesday, July 30

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM