【发布时间】:2019-07-23 11:07:50
【问题描述】:
我已经编写了一个代码来使用 Python 中的 Scrapy 抓取页面。下面我已经粘贴了 main.py 代码。但是,每当我运行我的蜘蛛时,它只会从第一页抓取(调试:从 https://www.tuscc.si/produkti/instant-juhe> 抓取),这也是请求中的引用者标头(检查时)。
我已尝试添加“请求有效负载”字段数据的来源,将其粘贴在此处:{"action":"loadList","skip":64,"filter":{"1005":[], "1006":[],"1007":[],"1009":[],"1013":[]}},以及当我尝试用它打开页面时(在这个lookout中修改:
https://www.tuscc.si/produkti/instant-juhe#32;'action':'loadList';'skip':'32';'sort':'none'
),浏览器会打开它。但是scrapy shell没有。我还尝试从请求 URL 中添加数字:https://www.tuscc.si/cache/script/tuscc.js?1563872492384,其中查询字符串参数为 1563872492384;但它仍然不会从请求的页面中抓取。
另外,我尝试了很多变化并添加了很多东西,我在网上阅读了所有内容,只是为了看看是否会有进展,但没有......
代码是:
from scrapy.spiders import CrawlSpider
from tus_pomos.items import TusPomosItem
from tus_pomos.scrapy_splash import SplashRequest
class TusPomosSpider(CrawlSpider):
name = 'TUSP'
allowed_domains = ['www.tuscc.si']
start_urls = ["https://www.tuscc.si/produkti/instant-juhe#0;1563872492384;",
"https://www.tuscc.si/produkti/instant-juhe#64;1563872492384;", ]
download_delay = 5.0
def start_requests(self):
# payload = [
# {"action": "loadList",
# "skip": 0,
# "filter": {
# "1005": [],
# "1006": [],
# "1007": [],
# "1009": [],
# "1013": []}
# }]
for url in self.start_urls:
r = SplashRequest(url, self.parse, magic_response=False, dont_filter=True, endpoint='render.json', meta={
'original_url': url,
'dont_redirect': True},
args={
'wait': 2,
'html': 1
})
r.meta['dont_redirect'] = True
yield r
def parse(self, response):
items = TusPomosItem()
pro = response.css(".thumb-box")
for p in pro:
pro_link = p.css("a::attr(href)").extract_first()
pro_name = p.css(".description::text").extract_first()
items['pro_link'] = pro_link
items['pro_name'] = pro_name
yield items
总之,我要求从分页中抓取所有页面,例如这个页面(我也尝试使用命令scrapy shell url):
https://www.tuscc.si/produkti/instant-juhe#64;1563872492384;
但响应始终是第一页,并且在反复抓取:
如果您能帮助我,我将不胜感激。谢谢
PARSE_DETAILS 生成器函数
def parse_detail(self, response):
items = TusPomosItem()
pro = response.css(".thumb-box")
for p in pro:
pro_link = p.css("a::attr(href)").extract_first()
pro_name = p.css(".description::text").extract_first()
items['pro_link'] = pro_link
items['pro_name'] = pro_name
my_details = {
'pro_link': pro_link,
'pro_name': pro_name
}
with open('pro_file.json', 'w') as json_file:
json.dump(my_details, json_file)
yield items
# yield scrapy.FormRequest(
# url='https://www.tuscc.si/produkti/instant-juhe',
# callback=self.parse_detail,
# method='POST',
# headers=self.headers
# )
在这里我不确定是否应该按原样分配我的“items”变量,还是从 response.body 中获取? 此外,产量应该是它的方式,还是我应该用一个请求来改变它(这不仅仅是部分被给出的答案代码复制)?
我是新来的,谢谢你的理解!
【问题讨论】:
标签: python python-3.x web-scraping scrapy