可以根据ID将scrapy提交到输入吗?

时间:2019-03-09 15:49:17

标签: python beautifulsoup scrapy

我有一个具有多个输入字段的Intranet页面,我需要Scrapy才能使用网页“搜索产品”输入字段来运行搜索,它的ID为“ searchBox”

我已经能够使用Scrapy和Beautiful Soup锁定正确的搜索框,但是我不确定如何将这些数据正确地传递回Scrapys表单提交功能。

在方法1中,我试图将结果简单地作为输入传递给Scrapys FormRequest.from_response函数,但是它不起作用。

方法1-使用Scrapy查找数据

#Search for products
def parse(self, response):

    ##Let's try search using scrapy only
    sel = Selector(response)
    results = sel.xpath("//*[contains(@id, 'searchBox')]")
    for result in results:
        print (result.extract())   #Print out what scrapy found
    return scrapy.FormRequest.from_response(results, formdata = {'Item': 'Whirlpool Washing Machine'}) #formdata is the data we are sending

方法2-使用精美汤来查找数据

#Search for products
def parse(self, response):

    ##Let's try search using Beautiful Soup only
    soup = BeautifulSoup(response.text, 'html.parser')  
    product_search = []
    product_search.append(soup.find("input", id="searchBox")) 
    print(product_search) #Print what BS found

1 个答案:

答案 0 :(得分:0)

关于scrapy变体:

  1. 您应该del /?,而不是yield
  2. 在函数return中,您应该使用形式选择器作为第一个参数。现在,据我从您的代码中可以了解到的,您在那里传递了一些输入数据。

尝试类似的东西:

from_response

只需在此表达式中修复表单选择器即可。还要检查此请求中还应该使用什么,例如一些标头,Cookie等。