簡體   English   中英

如何從HTML提取URL

[英]How to extract URL from an HTML

我是網絡抓取的新手。 我做如下

from urllib.request import urlopen
from bs4 import BeautifulSoup
import re
html = urlopen("http://chgk.tvigra.ru/letopis/?2016/2016_spr#27mar")
soup = BeautifulSoup(html, "html.parser")
res = soup.find_all('a', {'href': re.compile("r'\b?20\b'")})
print (res)

並得到

[]

我的目標是這個片段

<script language="javascript" type="text/javascript">
cont = new Array();
count = new Array();
for (i=1979; i <=2015; i++){count[i]=0};
cont[1979] =    "<li><a href='?1979_1#24jan'>24 января</a>" +  

..............

cont[2016] =    "<li><a href='?2016/2016_spr#cur'>Весенняя серия</a>" +
        "<li><a href='?2016/2016_sum#cur'>Летняя серия</a>" +
        "<li><a href='?2016/2016_aut#cur'>Осенняя серия</a>" +
        "<li><a href='?2016/2016_win#cur'>Зимняя серия</a>";

我試圖得到這樣的結果

'?2016/2016_spr#cur' 
'?2016/2016_sum#cur'
'?2016/2016_aut#cur'
'?2016/2016_win#cur'

從2000年到現在(因此, "r'\\b?20\\b'"就是這個原因)。 你能幫我嗎?

預備賽:

>>> import requests
>>> import bs4
>>> page = requests.get('http://chgk.tvigra.ru/letopis/?2016/2016_spr#27mar').content
>>> soup = bs4.BeautifulSoup(page, 'lxml')

完成此操作后,似乎似乎最容易識別script元素的方法是使用以下方法:

>>> scripts = soup.findAll('script', text=bs4.re.compile('cont = new Array();'))

但是, scripts證明是一個空列表。 (我不知道為什么。)

如果我在腳本中選擇了一個不同的目標,則基本方法行得通,但是看起來依賴於Javascript腳本元素的內容的確切格式是不安全的。

>>> scripts = soup.find_all(string=bs4.re.compile('i=1979'))
>>> len(scripts)
1

不過,這可能對您已經足夠了。 請注意,該腳本最后具有change功能,將被丟棄。

一種更安全的方法可能是先查找包含table元素,然后在其中table第二個td元素,最后在其中查找script

>>> table = soup.find_all('table', class_='common_table')
>>> tds = table[0].findAll('td')[1]
>>> script = tds.find('script')

同樣,您將需要放棄功能change

您可以使用get('attribute') ,然后根據需要過濾結果:

from urllib.request import urlopen
from bs4 import BeautifulSoup

html = urlopen("http://chgk.tvigra.ru/letopis/?2016/2016_spr#27mar")
soup = BeautifulSoup(html, "html.parser")
res = [link.get('href') for link in soup.find_all('a')]
print (res)

暫無
暫無

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

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