簡體   English   中英

在python中使用Regex進行網頁爬取

[英]Web Scraping multiple pages using Regex in python

我正在嘗試從網站上抓取清單。 該列表擴展到4個不同的頁面。 URL中為每個頁面更改的參數為“偏移”。 因此對於,

第一頁偏移量= 0

第二頁偏移量= 100

第三頁偏移量= 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))

上面的代碼檢索“ offset = 0”所需的值。 我在網址本身中附加了“ 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))

您的第二個正則表達式格式錯誤:

'<a href="\/players\/\w{1}\/''\w+\d{2}\.html">([^<]*)</a>'

代替

'<a href="\/players\/\w{1}\/\w+\d{2}\.html">([^<]*)</a>'

那是錯字嗎?

另外,需要注意的另一點是,正則表達式無法完全解析HTML除XHTML自包含標記之外,RegEx匹配打開的標記 )。 您應該真正考慮切換到HTML解析器(在python中,Scrapy在解析內容方面做得很好),否則您可能會冒着幾個小時被怪異的bug困擾的風險。

只是標題上寫着,“使用Regex抓取”有什么問題。 不要這樣 BeautifulSoap只是一個更好的工具。 用它。 您的生活將會改善,貓會坐在您的腿上,我什至沒有提到您的妻子/丈夫(如果您沒有,會為您)做什么。

暫無
暫無

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

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