tno*_*620 5 python splash-screen scrapy web-scraping scrapy-splash
我正在使用scrapy-splash抓取以下网页,http://www.starcitygames.com/buylist/,我必须先登录才能获取所需的数据。效果很好,但是为了获取数据,我需要单击显示按钮,这样我就可以抓取这些数据,直到单击该按钮,才能访问所需的数据。我已经得到了一个答案,告诉我不能简单地单击显示按钮并抓取显示的数据,并且我需要抓取与该信息关联的JSON网页,但是我担心抓取JSON会变成红色标记网站的所有者,因为大多数人没有打开JSON数据页面,而与计算机相比,需要花费几分钟的时间才能找到它,因此速度要快得多。所以我想我的问题是,是否仍要刮擦我的点击显示页面并从那里去,还是只能刮取JSON页面?这就是我到目前为止所得到的...
import scrapy
from ..items import NameItem
class LoginSpider(scrapy.Spider):
name = "LoginSpider"
start_urls = ["http://www.starcitygames.com/buylist/"]
def parse(self, response):
return scrapy.FormRequest.from_response(
response,
formcss='#existing_users form',
formdata={'ex_usr_email': 'abc@example.com', 'ex_usr_pass': 'password'},
callback=self.after_login
)
def after_login(self, response):
item = NameItem()
display_button = response.xpath('//a[contains(., "Display>>")]/@href').get()
yield response.follow(display_button, self.parse)
item["Name"] = response.css("div.bl-result-title::text").get()
return item
Run Code Online (Sandbox Code Playgroud)
您可以使用浏览器的开发人员工具来跟踪该点击事件的请求,该事件采用一种不错的JSON格式,也不需要cookie(登录):
http://www.starcitygames.com/buylist/search?search-type=category&id=5061
唯一需要填写的是category_id与此请求相关的请求,可以从HTML中提取该请求并在您的代码中声明。
分类名称:
//*[@id="bl-category-options"]/option/text()
Run Code Online (Sandbox Code Playgroud)
类别编号:
//*[@id="bl-category-options"]/option/@value
Run Code Online (Sandbox Code Playgroud)
使用JSON比解析HTML简单得多。
| 归档时间: |
|
| 查看次数: |
298 次 |
| 最近记录: |