我正在为Mac OSX Lion 10.7.5上的Python 2.7使用Scrapy 0.16.5
我对Scrapy还是个新手。我看了一大堆教程视频,虽然这在某些方面是有帮助的,但他们还没有能够明确地回答我的一些问题,这些问题与我当前的项目有关-我还没有找到一个解决方案来获得我需要的数据。
我的项目:
因此,我正在努力建立一个BoxOfficeMojo.com的刮板,并为每部电影获得4个不同的东西:电影名称,电影网址,电影上映日期和电影票房收入。然后,我想将此信息放入MySQL数据库中。最初,我只是希望得到一页电影,特别是找到here。如你所见,这只是一部电影。最终,我将需要得到所有的A,然后是所有的B,等等。但是,现在,这对于构建一个初始的刮板是很好的。
路径:
所以我不能在这里发布完整的路径,因为它最终只是发布了电影信息。通向我感兴趣的数据的xpath是:
//div[@id="body"]/div/table/tr/td/table/tr[2]/td/table[2]
//div[@id="body"]/div/table/tr/td/table/tr/td/table[2]如果您转到我上面链接页面并查看源代码,跟随xpath,您将看到我正在查看的内容。这个长字符串的第一部分是链接,即电影字母A-Z,然后是当前页面上的电影及其信息。
我的代码:
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from BoxOfficeMojo.items import BoxofficemojoItem
class MojoSpider(BaseSpider):
name = 'MojoSpider'
allowed_domains = ['boxofficemojo.com']
start_urls = ['http://www.boxofficemojo.com/movies/alphabetical.htm?letter=A&p=.htm']
def parse(self, response):
hxs = HtmlXPathSelector(response)
print ('hxs:', hxs)
titles = hxs.select('//div[@id="body"]/div/table/tr/td/table/tr[2]/td/table[2]') #was previously
print ('rows:', rows)
for title in titles:
print ('title:', title)
movie = title.select('/tr')
print ('movie', movie)
#print ('title:', titles)
items = [] #previously = []
#for title in titles:
#item = BoxofficemojoItem()
#item['title'] = title.select('/td/font/b/text()').extract() #Was:td/font/a/b/text()
#item['link'] = title.select('/td/font/b/a/@href').extract() #Was:td/font/a/@href
#item['gross'] = title.select('/td/font/text()').extract() #Was:td[3]/font/text()
#item['release'] = title.select('/td/a/text()').extract() #Was: td[7]/font/a/text()
#items.append(item)
#return items注意:我已经注释掉了一些东西,并添加了打印语句,希望弄清楚是怎么回事。注释掉的部分的想法是,标题部分中的每一项都是一部电影。
实际打印的内容:
下面是代码运行时实际打印出来的内容
('row:', <HtmlXPathSelector xpath='//div[@id="body"]/div/table/tr/td/table/tr[2]/td/table[2]/tr' data=u'<tr><td align="center" bgcolor="#dcdcdc"'>)
('cells:', [])
('row:', <HtmlXPathSelector xpath='//div[@id="body"]/div/table/tr/td/table/tr[2]/td/table[2]/tr' data=u'<tr><td align="left" bgcolor="#ffffff"><'>)
('cells:', [])
('row:', <HtmlXPathSelector xpath='//div[@id="body"]/div/table/tr/td/table/tr[2]/td/table[2]/tr' data=u'<tr><td align="left" bgcolor="#f4f4ff"><'>)
('cells:', [])
('row:', <HtmlXPathSelector xpath='//div[@id="body"]/div/table/tr/td/table/tr[2]/td/table[2]/tr' data=u'<tr><td align="left" bgcolor="#ffffff"><'>)
('cells:', [])
('row:', <HtmlXPathSelector xpath='//div[@id="body"]/div/table/tr/td/table/tr[2]/td/table[2]/tr' data=u'<tr><td align="left" bgcolor="#f4f4ff"><'>)
('cells:', [])同样,这只是一个次要的选择。另外,我在最初这样做的时候用的是row而不是title --只是想让它更具可读性。
当我使用注释掉的部分时,我总是得到一堆空的字典条目。
发布于 2013-08-21 22:48:05
请在text()的位置键入string(),它工作正常。我测试了你的一个项目的代码。你可以把剩下的分开。
def parse(self, response):
hxs = HtmlXPathSelector(response)
print ('hxs:', hxs)
titles = hxs.select('//div[@id="body"]/div/table/tr/td/table/tr[2]/td/table[2]/tr/td') #was previously
#print ('title:', titles)
items = [] #previously = []
for title in titles:
item = OnthegoItem()
item['title'] = title.select('string()').extract() #Was:td/font/a/b/text()
items.append(item)
return itemshttps://stackoverflow.com/questions/17931427
复制相似问题