更新 Scrapy 后 Spider 不会 运行
Spider won't run after updating Scrapy
正如这里经常发生的那样,我对 Python 2.7 和 Scrapy 还很陌生。我们的项目让我们抓取网站日期,跟踪一些链接和更多抓取,等等。这一切都很好。然后我更新了Scrapy。
现在,当我启动蜘蛛时,我收到以下消息:
这在以前的任何地方都不会出现(none 我之前的错误消息看起来像这样)。我现在 运行 scrapy 1.1.0 Python 2.7。 none 之前在这个项目上工作的蜘蛛正在工作。
如果需要,我可以提供一些示例代码,但我对 Python 的(公认的有限)知识向我表明,它在爆炸之前甚至没有进入我的脚本。
编辑:
好的,所以这段代码应该从迪肯大学学者在 The Conversation 上的第一个作者页面开始,然后浏览并抓取他们写了多少篇文章和发表了多少评论。
import scrapy
from ltuconver.items import ConversationItem
from ltuconver.items import WebsitesItem
from ltuconver.items import PersonItem
from scrapy import Spider
from scrapy.selector import Selector
from scrapy.http import Request
import bs4
class ConversationSpider(scrapy.Spider):
name = "urls"
allowed_domains = ["theconversation.com"]
start_urls = [
'http://theconversation.com/institutions/deakin-university/authors']
#URL grabber
def parse(self, response):
requests = []
people = Selector(response).xpath('///*[@id="experts"]/ul[*]/li[*]')
for person in people:
item = WebsitesItem()
item['url'] = 'http://theconversation.com/'+str(person.xpath('a/@href').extract())[4:-2]
self.logger.info('parseURL = %s',item['url'])
requests.append(Request(url=item['url'], callback=self.parseMainPage))
soup = bs4.BeautifulSoup(response.body, 'html.parser')
try:
nexturl = 'https://theconversation.com'+soup.find('span',class_='next').find('a')['href']
requests.append(Request(url=nexturl))
except:
pass
return requests
#go to URLs are grab the info
def parseMainPage(self, response):
person = Selector(response)
item = PersonItem()
item['name'] = str(person.xpath('//*[@id="outer"]/header/div/div[2]/h1/text()').extract())[3:-2]
item['occupation'] = str(person.xpath('//*[@id="outer"]/div/div[1]/div[1]/text()').extract())[11:-15]
item['art_count'] = int(str(person.xpath('//*[@id="outer"]/header/div/div[3]/a[1]/h2/text()').extract())[3:-3])
item['com_count'] = int(str(person.xpath('//*[@id="outer"]/header/div/div[3]/a[2]/h2/text()').extract())[3:-3])
在我的设置中,我有:
BOT_NAME = 'ltuconver'
SPIDER_MODULES = ['ltuconver.spiders']
NEWSPIDER_MODULE = 'ltuconver.spiders'
DEPTH_LIMIT=1
显然我的 six.py 文件已损坏(或类似的东西)。用同事的同一个文件换出后,它又开始工作了 8-\
正如这里经常发生的那样,我对 Python 2.7 和 Scrapy 还很陌生。我们的项目让我们抓取网站日期,跟踪一些链接和更多抓取,等等。这一切都很好。然后我更新了Scrapy。
现在,当我启动蜘蛛时,我收到以下消息:
这在以前的任何地方都不会出现(none 我之前的错误消息看起来像这样)。我现在 运行 scrapy 1.1.0 Python 2.7。 none 之前在这个项目上工作的蜘蛛正在工作。
如果需要,我可以提供一些示例代码,但我对 Python 的(公认的有限)知识向我表明,它在爆炸之前甚至没有进入我的脚本。
编辑: 好的,所以这段代码应该从迪肯大学学者在 The Conversation 上的第一个作者页面开始,然后浏览并抓取他们写了多少篇文章和发表了多少评论。
import scrapy
from ltuconver.items import ConversationItem
from ltuconver.items import WebsitesItem
from ltuconver.items import PersonItem
from scrapy import Spider
from scrapy.selector import Selector
from scrapy.http import Request
import bs4
class ConversationSpider(scrapy.Spider):
name = "urls"
allowed_domains = ["theconversation.com"]
start_urls = [
'http://theconversation.com/institutions/deakin-university/authors']
#URL grabber
def parse(self, response):
requests = []
people = Selector(response).xpath('///*[@id="experts"]/ul[*]/li[*]')
for person in people:
item = WebsitesItem()
item['url'] = 'http://theconversation.com/'+str(person.xpath('a/@href').extract())[4:-2]
self.logger.info('parseURL = %s',item['url'])
requests.append(Request(url=item['url'], callback=self.parseMainPage))
soup = bs4.BeautifulSoup(response.body, 'html.parser')
try:
nexturl = 'https://theconversation.com'+soup.find('span',class_='next').find('a')['href']
requests.append(Request(url=nexturl))
except:
pass
return requests
#go to URLs are grab the info
def parseMainPage(self, response):
person = Selector(response)
item = PersonItem()
item['name'] = str(person.xpath('//*[@id="outer"]/header/div/div[2]/h1/text()').extract())[3:-2]
item['occupation'] = str(person.xpath('//*[@id="outer"]/div/div[1]/div[1]/text()').extract())[11:-15]
item['art_count'] = int(str(person.xpath('//*[@id="outer"]/header/div/div[3]/a[1]/h2/text()').extract())[3:-3])
item['com_count'] = int(str(person.xpath('//*[@id="outer"]/header/div/div[3]/a[2]/h2/text()').extract())[3:-3])
在我的设置中,我有:
BOT_NAME = 'ltuconver'
SPIDER_MODULES = ['ltuconver.spiders']
NEWSPIDER_MODULE = 'ltuconver.spiders'
DEPTH_LIMIT=1
显然我的 six.py 文件已损坏(或类似的东西)。用同事的同一个文件换出后,它又开始工作了 8-\