2017-08-24 10 views
1

我在python中創建了一個刮板來從網頁獲取不同的批號。但是,當我運行我的刮板時,我在控制檯中看到「請求的URL無效」。我試圖獲得響應網址,並發現它是有效的。在處理請求時是否有任何錯誤? 我,試圖腳本:刮板拋出無效的網址錯誤

import requests 
from lxml import html 

payload = {"keyword":"degas"} 

headers={ 
"Content-Type":"text/html; charset=UTF-8", 
"User-Agent":"Mozilla/5.0" 
} 

response = requests.get("http://www.sothebys.com/en/search-results.html?", params=payload, headers=headers, allow_redirects=False) 
# tree = html.fromstring(response.text) 
# for item in tree.cssselect("div.search-results-lot-number"): 
#  print(item.text) 

print(response.url) 
print(response.text) 
print(response.status_code) 

這是我在印刷時 「response.url」, 「response.text」 控制檯獲得,而 「response.status_code」:

http://www.sothebys.com/en/search-results.html?keyword=degas 
<HTML><HEAD> 
<TITLE>Invalid URL</TITLE> 
</HEAD><BODY> 
<H1>Invalid URL</H1> 
The requested URL "&#91;no&#32;URL&#93;", is invalid.<p> 
Reference&#32;&#35;9&#46;541d2017&#46;1503578560&#46;40be2bd 
</BODY></HTML> 

400 

順便說一句,如果我手動檢查URL,然後我發現它確實將我帶到了所需的頁面。

+0

您擁有的網址將重定向到「未找到」頁面。 http://www.sothebys.com/en/notfound.html – Mekicha

+0

由於您的請求中包含'allow_redirects = False',它只會引發錯誤。 – Mekicha

+0

@ Mekicha,「allow_redirects = True」給了我與使用False參數相同的結果。 – SIM

回答

0

我按照下面的方式工作。

import requests 

payload = { 
    'keyword':'degas', 
    'pageSize':'24', 
    'offset':'0' 
    } 

headers={ 
    'Accept':'application/json, text/javascript, */*; q=0.01', 
    'Referer':'http://www.sothebys.com/en/search-results.html?keyword=degas', 
    "User-Agent":"Mozilla/5.0" 
    } 

response = requests.get("http://www.sothebys.com/en/search", params=payload, headers=headers) 

print(response.url) 
print(response.status_code) 
print(response.text) 
1

我想你使用的是錯誤的標題。以下爲我工作頭:

headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Cafari/537.36'} 

輸出:

<!DOCTYPE html> 
<!--[if lt IE 7]>  <html xml:lang="en" lang="en" class="no-js pre-ie9"> <![endif]--> 
<!--[if IE 7]>   <html xml:lang="en" lang="en" class="no-js ie7 pre-ie9"> <![endif]--> 
<!--[if IE 8]>   <html xml:lang="en" lang="en" class="no-js ie8 pre-ie9"> <![endif]--> 
<!--[if IE 9]>   <html xml:lang="en" lang="en" class="no-js ie9"> <![endif]--> 
<!--[if gt IE 9]><!--> <html xml:lang="en" lang="en" class="no-js"> <!--<![endif]--> 

<head> 
    <!--GLOBAL META--> 
<!-- requestUrl=/content/sothebys/en/search-results.html?keyword=degas --> 
<title>Search Results | Sotheby's</title> 
<meta name="description" content="View auction details, art exhibitions and online catalogues; bid, buy and collect contemporary, impressionist or modern art, old masters, jewellery, wine, watches, prints, rugs and books at sotheby's auction house"> 
<meta name="keywords" content="auction, art, exhibition, online, catalogue, bid, buy, collect, contemporary, impressionist, modern, old mast... 

。 。 。

+0

你是對的Sam Chats,它對我也是如此。有時候,苗條並不聰明。我試圖讓User-Agent簡潔,給解析器一個很好的外觀,但事實證明這是錯誤的。最後一件事:如果我在解析器中取出未註釋的行來獲取批號,爲什麼它不取任何東西。你能給我任何想法嗎?再次感謝。 – SIM

+0

@Shahin嘗試使用「//div.search-results-lot-number」。 –