簡體   English   中英

Python 網頁抓取問題

[英]Python Web Scraping Issue

基本上我有一個很大的 html 文檔,我想抓取它。 類似文檔的一個非常簡化的示例如下:

<a name = 'ID_0'></a>
<span class='c2'>Date</span>
<span class='c2'>December 12,2005</span>
<span class='c2'>Source</span>
<span class='c2'>NY Times</span>
<span class='c2'>Author</span>
<span class='c2'>John</span>

<a name = 'ID_1'></a>
<span class='c2'>Date</span>
<span class='c2'>January 21,2008</span>
<span class='c2'>Source</span>
<span class='c2'>LA Times</span>

<a name = 'ID_2'></a>
<span class='c2'>Source</span>
<span class='c2'>Wall Street Journal</span>
<span class='c2'>Author</span>
<span class='c2'>Jane</span>

該文檔大約有 3500 個“a”標簽,起初我認為每個標簽都有相同的布局。 所以,我寫了一些類似的東西:

a_list = soup.find_all('a')
data2D = []
for i in range(0,len(a_list)):
    data=[]
    data.append(a_list[i]['name'])
    data.append(a_list[i].find_next(text='Date').find_next().text)
    data.append(a_list[i].find_next(text='Source').find_next().text)
    data.append(a_list[i].find_next(text='Author').find_next().text)
    data2D.append(data)

但是,由於某些 ID 缺少作者或日期,因此抓取工具會從下一個 ID 中獲取下一個可用的作者或日期。 ID_1 將具有 ID_2 作者。 ID_2 將具有 ID_3 日期。 我的第一個想法是以某種方式跟蹤每個標簽處的索引,如果索引超過下一個“a”標簽索引,則附加 null。 有更好的解決方案嗎?

而不是find_next() ,我會使用.find_next_siblings() (或.find_all_next() )並獲取所有標簽,直到下a鏈接或文檔結尾。 沿着這些路線的東西:

links = soup.find_all('a', {"name": True})
data = []
columns = set(['Date', 'Source', 'Author'])

for link in links:
    item = [link["name"]]
    for elm in link.find_next_siblings():
        if elm.name == "a":
            break  # hit the next "a" element - break

        if elm.text in columns:
            item.append(elm.find_next().text)

     data.append(item)

暫無
暫無

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

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