1

ページ上のすべての URL を取得する必要がある作業を行っています。microsoft.com など、私がテストしたほとんどの Web サイトで動作するようですが、google.com からは 3 つしか返されません。関連するソースコードは次のとおりです。


   import urllib
   import time
   import re
   fwcURL = "http://www.microsoft.com" #URL to read
   mylines = urllib.urlopen(fwcURL).readlines()
   print "Found URLs:"
   time.sleep(1) #Pause execution for a bit
   for item in mylines:
     if "http://" in item.lower(): #For http
       print item[item.index("http://"):].split("'")[0].split('"')[0] # Remove ' and " from the end, for example in href=
     if "https://" in item.lower(): #For https
       print item[item.index("https://"):].split("'")[0].split('"')[0] # Ditto

私のコードを改善できる場合、またはこれを行うためのより良い方法がある場合は、返信してください。前もって感謝します!

4

3 に答える 3

3

Mechanize または BeautifulSoup または lxml を使用してみてください。

BeautifulSoup を使用すると、すべての html/xml コンテンツを非常に簡単に取得できます。

import urllib2
from BeautifulSoup import BeautifulSoup
page = urllib2.urlopen("some_url")
soup = BeautifulSoup(page.read())
links = soup.findAll("a")
for link in links:
    print link["href"]

BeautifulSoup習得と理解が非常に簡単です。

于 2012-06-24T04:41:25.460 に答える
2

私はlxmlを使用して、次のことを行います。

import lxml.html

page = lxml.html.parse('http://www.microsoft.com').getroot()
anchors = page.findall('a')

リンクが(JSなどを介して)動的に生成される場合、何らかの方法でブラウザーを自動化することでリンクが不足することはありません。

于 2012-06-24T05:12:30.993 に答える
2

まず第一に、HTML は通常の言語ではなく、そのような単純な文字列操作がすべてのページで機能するわけではありません。実際の HTML パーサーが必要です。Lxmlをお勧めします。あとは、ツリーを再帰して必要な要素を見つけるだけです。

第 2 に、一部のページは動的である可能性があるため、html ソース内のすべてのコンテンツを見つけることはできません。Google は JavaScript と AJAX を多用しています (ページをリロードせずに結果を表示する方法に注目してください)。

于 2012-06-24T04:40:16.673 に答える