爬取的是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...