我想從網站上刮取一個列表。該列表已擴展到4個不同的頁面。 URL中爲每個頁面更改的參數都是「偏移量」。因此,對於,使用正則表達式在python中刮網頁
第1頁偏移量= 0
第2頁偏移量= 100
第3頁偏移量= 200
第4頁偏移= 300
我已經寫了下面的代碼: -
import re
import urllib
urlHandle = urllib.urlopen("http://sampleurl.com?request=1&offset=0")
content = urlHandle.read()
pattern1 = re.compile('<a href="\/players\/\w{1}\/\w+\d{2}\.html">([^<]*)</a>')
for match in pattern1.finditer(content):
print(match.group(1))
上面的代碼檢索「偏移量= 0" 。我在url本身附加了「offset = 0」。現在,因爲它擴展到4頁,我試着寫下面的代碼
import re
import urllib
import urllib2
for i in range(0,400,100):
targeturl = "http://sampleurl.com?request=1&"
values = {'offset':i}
data = urllib.urlencode(values)
# req = urllib2.Request(targeturl,data)
finalurl = targeturl + data
urlHandle = urllib.urlopen(finalurl)
content = urlHandle.read()
pattern1 = re.compile('<a href="\/players\/\w{1}\/\w+\d{2}\.html">([^<]*)</a>')
for match in pattern1.finditer(content):
print(match.group(1))
不知怎的,它不返回任何東西。我究竟做錯了什麼?
< <編輯>>
我也試過以下。它也沒有工作
import re
import urllib
import urllib2
for i in range(0,400,100):
targeturl = "http://sampleurl.com?request=1&offset=0"
urlHandle = urllib.urlopen(targeturl)
content = urlHandle.read()
pattern1 = re.compile('<a href="\/players\/\w{1}\/\w+\d{2}\.html">([^<]*)</a>')
for match in pattern1.finditer(content):
print(match.group(1))
感謝@Robin的輸入。但我仍然沒有看到任何改變。最初我在循環中使用了「我」。這是一個錯字。對於第二部分,我確實更改了我的網址以添加偏移量網址。但仍面臨同樣的問題。 URL中還有許多其他參數,它們保持不變並且不會更改。我一直保持着目標。我希望這不是問題。 – Neil
另外,我應該使用正則表達式。我知道HTML解析器更容易使用:( – Neil
在你的代碼中,你使用'urlHandle = urllib2.urlopen(targeturl)'。這是否也是一個錯字,而且你真的擁有'urlHandle = urllib2.urlopen(req)'?因爲在我看來你並沒有使用帶有偏移量參數的URL,這可能會導致你的問題 – Robin