Python 2.7 Scrapy-HTMLPathSelector、XPath、Extract
我在Python 2.7 Scrapy-HTMLPathSelector、XPath、Extract,python-2.7,scrapy,Python 2.7,Scrapy,我在macosxlion10.7.5上为python2.7使用scrapy0.16.5 我对Scrapy相当陌生。我看了大量的教程视频,虽然这些视频在某些方面很有帮助,但他们还不能肯定地回答与我当前项目相关的一些问题——我还没有找到一个解决方案来获得我需要的数据 我的项目: 因此,我正在制作一个刮片器,它可以访问BoxOfficeMojo.com,为每部电影获取4种不同的内容:电影标题、电影URL、电影发行日期以及电影总收入。然后我想把这些信息放到一个MySQL数据库中。起初,我只是想看一页电影
macosxlion10.7.5
上为python2.7
使用scrapy0.16.5
我对Scrapy
相当陌生。我看了大量的教程视频,虽然这些视频在某些方面很有帮助,但他们还不能肯定地回答与我当前项目相关的一些问题——我还没有找到一个解决方案来获得我需要的数据
我的项目:
因此,我正在制作一个刮片器,它可以访问BoxOfficeMojo.com,为每部电影获取4种不同的内容:电影标题、电影URL、电影发行日期以及电影总收入。然后我想把这些信息放到一个MySQL数据库中。起初,我只是想看一页电影,特别是找到的。正如你们所看到的,这只是电影A-Ac。最终我需要得到所有的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:', [])
(“行:”,)
(“单元格:”,[])
(“行:”,)
(“单元格:”,[])
(“行:”,)
(“单元格:”,[])
(“行:”,)
(“单元格:”,[])
(“行:”,)
(“单元格:”,[])
同样,这只是一个小选择。另外,我最初做这项工作时,用行
代替了标题,只是想让它更具可读性
当我使用注释掉的部分时,我总是会得到一堆空的字典条目。请键入string()代替text(),效果很好。我测试了一个项目的代码。你可以把其余的分开
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 items
请键入string()代替text(),效果很好。我测试了一个项目的代码。你可以把其余的分开
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 items
感谢您花时间通读并发表评论!我会尽快检查并标记正确。现在就投票吧:-)!感谢您花时间通读并发表评论!我会尽快检查并标记正确。现在就投票吧:-)!