我正在尝试使用具有以下代码结构的网站的搜索功能:
<div class='search'>
<div class='inner'>
<form accept-charset="UTF-8" action="/gr/el/products" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /></div>
<label for='query'>Ενδιαφέρομαι για...</label>
<fieldset>
<input class="search-input" data-search-url="/gr/el/products/autocomplete.json" id="text_search" name="query" placeholder="Αναζητήστε προϊόν" type="text" />
<button type='submit'>Αναζήτηση</button>
</fieldset>
</form>
</div>
</div>
使用这个python脚本:
import requests
from bs4 import BeautifulSoup
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1'}
payload = {
'query':'test'
}
r = requests.get('http://www.pharmacy295.gr',data = payload ,headers = headers)
soup = BeautifulSoup(r.text,'lxml')
products = soup.findAll('span', {'class':'name'})
print(products)
此代码是在本网站上广泛搜索如何执行此任务的结果,但我似乎无法获得任何搜索结果 - 只是网站的主页。
答案 0 :(得分:4)
将products
添加到您的网址,它会正常工作,方法会显示在表单中,表单也会显示网址。如果您不确定破解打开使用firefox或chrome上的开发人员控制台,您可以确切地看到请求是如何生成的
payload = {
'query':'neutrogena',
}
r = requests.get('http://www.pharmacy295.gr/products',data = payload ,headers = headers)
soup = BeautifulSoup(r.text,'lxml')
products = soup.findAll('span', {'class':'name'})
print(products)
输出:
[<span class="name">NEUTROGENA - Hand & Nail Cream - 75ml</span>, <span class="name">NEUTROGENA - Hand Cream (Unscented) - 75ml</span>, <span class="name">NEUTROGENA - PROMO PACK 1+1 \u0394\u03a9\u03a1\u039f Lip Moisturizer - 4,8gr</span>, <span class="name">NEUTROGENA - Lip Moisturizer with Nordic Berry - 4.9gr</span>]
如果您愿意,也可以将数据作为json:
获取In [13]: r = requests.get('http://www.pharmacy295.gr/el/products/autocomplete.json',data = payload ,headers = headers)
In [14]: print(r.json())
[{u'title': u'NEUTROGENA - Hand & Nail Cream - 75ml', u'discounted_price': u'5,31 \u20ac', u'photo': u'/system/uploads/asset/data/12584/tiny_108511.jpg', u'brand': u'NEUTROGENA ', u'path': u'/products/7547', u'price': u'8,17 \u20ac'}, {u'title': u'NEUTROGENA - Hand Cream (Unscented) - 75ml', u'discounted_price': u'4,03 \u20ac', u'photo': u'/system/uploads/asset/data/4689/tiny_102953.jpg', u'brand': u'NEUTROGENA ', u'path': u'/products/3958', u'price': u'6,20 \u20ac'}, {u'title': u'NEUTROGENA - PROMO PACK 1+1 \u0394\u03a9\u03a1\u039f Lip Moisturizer - 4,8gr', u'discounted_price': u'3,91 \u20ac', u'photo': u'/system/uploads/asset/data/5510/tiny_118843.jpg', u'brand': u'NEUTROGENA ', u'path': u'/products/4644', u'price': u'4,60 \u20ac'}, {u'title': u'NEUTROGENA - Lip Moisturizer with Nordic Berry - 4.9gr', u'discounted_price': u'2,91 \u20ac', u'photo': u'/system/uploads/asset/data/12761/tiny_126088.jpg', u'brand': u'NEUTROGENA ', u'path': u'/products/7548', u'price': u'4,48 \u20ac'}]
答案 1 :(得分:1)
首先,网址错误。您使用的是http://www.pharmacy295.gr
,但您应该使用http://www.pharmacy295.gr/gr/el/products
。此网址实际上可以简化为http://www.pharmacy295.gr/products
。
同时发出GET
请求,而不是data=payload
,请尝试params=payload
。
data
用于POST请求。
以下是requests.get()
的文档。
答案 2 :(得分:1)
执行r = requests.post('http://www.pharmacy295.gr',data = payload ,headers = headers)
GET请求也会忽略数据......
答案 3 :(得分:0)
option.classList.contains("j-list-field--disabled")