2

私はWebスクレイピングをしようとしていて、次のコードを使用していました:

import mechanize
from bs4 import BeautifulSoup

url = "http://www.thehindu.com/archive/web/2010/06/19/"

br =  mechanize.Browser()
htmltext = br.open(url).read()

link_dictionary = {}
soup = BeautifulSoup(htmltext)

for tag_li in soup.findAll('li', attrs={"data-section":"Chennai"}):
    for link in tag_li.findAll('a'):
        link_dictionary[link.string] = link.get('href')
        print link_dictionary[link.string]
        urlnew = link_dictionary[link.string]

        brnew =  mechanize.Browser()
        htmltextnew = brnew.open(urlnew).read()

        articletext = ""
        soupnew = BeautifulSoup(htmltextnew)
        for tag in soupnew.findAll('p'):
            articletext += tag.text

        print articletext

これを使用して印刷された値を取得できませんでした。しかし、attrs={"data-section":"Business"}代わりに使用attrs={"data-section":"Chennai"}すると、目的の出力を得ることができました。誰かが私を助けることができますか?

4

1 に答える 1

1

スクレイピングする前に、ウェブサイトの利用規約をお読みください

Chrome で firebug や inspect 要素を使用している場合、Mechanize や Urllib2 を使用している場合には表示されないコンテンツが表示される場合があります。

たとえば、あなたが送信したページのソース コードを表示する場合。(Chrome で右クリックしてソースを表示)。タグを検索すると、data-sectionタグが表示さchennaiれません. これにはブラウザの機能が必要です。

私があなたなら、セレンを使用してページを開き、そこからソース ページを取得します。そのようにして収集された HTML は、ブラウザーで表示されるものと似たものになります。

ここに引用

from selenium import webdriver
from bs4 import BeautifulSoup
import time    

driver = webdriver.Firefox()
driver.get("URL GOES HERE")
# I noticed there is an ad here, sleep til page fully loaded.
time.sleep(10)

soup = BeautifulSoup(driver.page_source)
print len(soup.findAll(...}))
# or you can work directly in selenium      
...

driver.close()

そして、私にとっての出力は8

于 2013-11-12T00:05:50.567 に答える