python爬取,響應狀態正確,但是解析不出內容

2021-09-03 03:14:14 字數 1937 閱讀 9376

爬取的是58同城租房資訊,執行程式後,只是游標在閃爍,長時間不顯示結果。由於狀態碼為200,所以考慮正規表示式是否合理。由於網頁源**中有大量的換行符,一開始匹配用的是[\s\s]*?,並沒有考慮所要獲取的內容基本都是獨一行,所以精簡後的正則在獲取內容時用(.*?)。再次執行程式,結果就出來了。

原來的正規表示式為:

pat = r'[\s\s]*?rel="nofollow" >([\s\s]*?)[\s\s]*?room strongbox">([\s\s]*?)    ([\s\s]*?)

[\s\s]*?([\s\s]*?)[\s\s]*?'

精簡後的表示式為:

pat = r'(.*?)    (.*?)([\d]*?)完整程式;

import requests

from requests.exceptions import requestexception

import re,json,os

def getpage(num):

'''獲取指定頁面資訊'''

url = ''+str(num)+'/?clickid=2'

headers =

try:

res = requests.get(url,headers=headers)

if res.status_code == 200:

#獲取資料

html = res.content.decode('utf-8')

#獲取整頁資料太慢,只其中的部分資料

html2 = html[25050:45050]

#解析資料

# pat = r'[\s\s]*?rel="nofollow" >([\s\s]*?)[\s\s]*?room strongbox">([\s\s]*?)    ([\s\s]*?)

[\s\s]*?([\s\s]*?)[\s\s]*?'

#精簡後的re表示式

pat = r'(.*?)    (.*?)([\d]*?)dlist = re.findall(pat,html,re.m)

x =int(str(num)+'01')

for item in dlist:

yield

#獲取img = requests.get('https:'+item[0])

print("共"+str(len(dlist))+"條資料")

else:

print('網頁爬取錯誤1')

return none

except requestexception as e:

print(e)

return none

def writefile(content):

'''將獲取的資訊寫入檔案'''

with open('./58req.txt','a',encoding='utf-8') as f:

f.write(json.dumps(content,ensure_ascii=false) + "\n")

def main(num):

'''主函式'''

#判斷當前路徑是否存在images資料夾,沒有則建立

if not os.path.exists('./images'):

os.mkdir('./images')

for item in getpage(num):

writefile(item)

if __name__ == '__main__':

num = int(input('請輸入你要檢視的頁面(1-70):'))

main(num)

python動態爬取知乎 python爬取微博動態

在初學爬蟲的過程中,我們會發現很多 都使用ajax技術動態載入資料,和常規的 不一樣,資料是動態載入的,如果我們使用常規的方法爬取網頁,得到的只是一堆html 沒有任何的資料。比如微博就是如此,我們可以通過下滑來獲取更多的動態。對於這樣的網頁該如何抓取呢?我們以微博使用者動態為例,抓取某名使用者的文...

Python爬取小說

感覺這個夠蛋疼的,因為你如果正常寫的話,前幾次執行沒問題,之後你連 都沒改,再執行就出錯了。其實這可能是網路請求失敗,或者有反爬蟲的東西吧。但這就會讓你寫的時候非常苦惱,所以這這東西,健壯性及其重要!import requests from bs4 import beautifulsoup impo...

python 爬取小說

前些天突然想看一些 可能是因為壓力大,所以就要有補償機制吧。為了節省流量,就想著把內容爬下來,然後就可以在路上看了。於是有了下面的指令碼。usr bin env python coding utf 8 import requests from lxml import etree 為了解決unicod...