我是使用scrapy进行网络抓取的新手。我想抓一个网站(请参阅代码中的网址)。 从网站上,我试图废弃“Intimation For%Month %% Year%”表中的信息,并将数据传输到json文件。
我收到错误,因为“'NoneType'对象不可迭代”,执行命令时出现错误:
scrapy抓取引号-o quotes.json
代码:
import scrapy
class QuotesSpider(scrapy.Spider):
name = "quotes"
def start_requests(self):
urls = [
'http://www.narakkalkuries.com/intimation.html#i'
]
def parse(self, response):
for check in response.xpath('//table[@class="MsoTableGrid"]'):
yield{
'data':check.xpath('//table[@class="MsoTableGrid"]/tr/td/p/b//text()').extract_first()
}
问题: 在网站上,所有的评价数据都存储在同名的表格中 table @ class =“MsoTableGrid”。
选项我尝试提取数据
选项1
response.xpath('//table[@class="MsoTableGrid"]').extract()
返回所有数据
1选项
response.xpath('//table[@class="MsoTableGrid"]/tr[i]/td/p/b').extract()
返回几个垂直列
2选项
response.xpath('//table[@class="MsoTableGrid"]/tr/td/p/b//text()').extract()[1]
从整个数据中返回第一个元素
问题:
答案 0 :(得分:1)
import scrapy
class QuotesSpider(scrapy.Spider):
name = "quotes"
def start_requests(self):
urls = [
'http://www.narakkalkuries.com/intimation.html#i'
]
# Here you need to yield the scrapy.Request
for url in urls:
yield scrapy.Request(url)
def parse(self, response):
for check in response.xpath('//table[@class="MsoTableGrid"]'):
yield{
'data':check.xpath('//table[@class="MsoTableGrid"]/tr/td/p/b//text()').extract_first()
}
答案 1 :(得分:1)
要添加start_requests
,预计会成为scrapy.Request
个对象的生成器。您的start_requests
不会产生任何结果:
def start_requests(self):
urls = [
'http://www.narakkalkuries.com/intimation.html#i'
]
要修复此问题,请在start_requests
方法中逐一生成网址:
def start_requests(self):
urls = [
'http://www.narakkalkuries.com/intimation.html#i'
]
for url in urls:
yield Requst(url)
或者仅使用设置start_requests
类属性,使用从scrapy.Spider
继承的默认start_urls
方法:
import scrapy
class QuotesSpider(scrapy.Spider):
name = "quotes"
start_urls = [
'http://www.narakkalkuries.com/intimation.html#i'
]