import scrapy
from scrapy.linkextractors import LinkExtractor #导入url提取器的类
from scrapy.spiders import CrawlSpider, Rule #Rule可用于自动发送请求
class XuexiSpider(CrawlSpider):
name = 'xuexi'
allowed_domains = ['www.xxx.com']
start_urls = ['http://www.xxx.com/']
#LinkExtractor(allow=r'Items/') 该类的allow参数写入正则匹配规则,就会按照正则去响应信息中匹配URL,当然也有别的匹配规则,比如CSS
rules = (
#follow为True可以自动将所有响应信息的符合的规则的url都获取到,并发送请求
Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', follow=True),
)
def parse_item(self, response):
item = {}
#item['domain_id'] = response.xpath('//input[@id="sid"]/@value').get()
#item['name'] = response.xpath('//div[@id="name"]').get()
#item['description'] = response.xpath('//div[@id="description"]').get()
return item
#1.爬虫文件.py代码示例:
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from sunPro.items import SunproItem,DetailItem
#需求:爬取sun网站中的编号,新闻标题,新闻内容,标号
class SunSpider(CrawlSpider):
name = 'sun'
# allowed_domains = ['www.xxx.com']
start_urls = ['http://wz.sun0769.com/index.php/question/questionType?type=4&page=']
#链接提取器:根据指定规则(allow="正则")进行指定链接的提取
link = LinkExtractor(allow=r'type=4&page=\d+')
link_detail = LinkExtractor(allow=r'question/\d+/\d+\.shtml')
rules = (
#规则解析器:将链接提取器提取到的链接进行指定规则(callback)的解析操作
Rule(link, callback='parse_item', follow=True),
#follow=True:可以将链接提取器 继续作用到 连接提取器提取到的链接 所对应的页面中
Rule(link_detail,callback='parse_detail')
)
#http://wz.sun0769.com/html/question/201907/421001.shtml
#http://wz.sun0769.com/html/question/201907/420987.shtml
#解析新闻编号和新闻的标题
#如下两个解析方法中是不可以实现请求传参!
#如法将两个解析方法解析的数据存储到同一个item中,可以以此存储到两个item
def parse_item(self, response):
#注意:xpath表达式中不可以出现tbody标签
tr_list = response.xpath('//*[@id="morelist"]/div/table[2]//tr/td/table//tr')
for tr in tr_list:
new_num = tr.xpath('./td[1]/text()').extract_first()
new_title = tr.xpath('./td[2]/a[2]/@title').extract_first()
item = SunproItem()
item['title'] = new_title
item['new_num'] = new_num
yield item
#解析新闻内容和新闻编号
def parse_detail(self,response):
new_id = response.xpath('/html/body/div[9]/table[1]//tr/td[2]/span[2]/text()').extract_first()
new_content = response.xpath('/html/body/div[9]/table[2]//tr[1]//text()').extract()
new_content = ''.join(new_content)
# print(new_id,new_content)
item = DetailItem()
item['content'] = new_content
item['new_id'] = new_id
yield item
#2.itmes.py代码示例:
#因为是不同页面的数据,又不能进行参数化,所有通过两个item类,来接收不同页面的解析数据
import scrapy
class SunproItem(scrapy.Item):
# define the fields for your item here like:
title = scrapy.Field()
new_num = scrapy.Field()
class DetailItem(scrapy.Item):
new_id = scrapy.Field()
content = scrapy.Field()
#3.pipeline.py代码示例:
#根据不同item的名字,来判断,数据来源于哪一个item
class SunproPipeline(object):
def process_item(self, item, spider):
#如何判定item的类型
#将数据写入数据库时,如何保证数据的一致性
if item.__class__.__name__ == 'DetailItem':
print(item['new_id'],item['content'])
pass
else:
print(item['new_num'],item['title'])
return item
我正在通过Scrapy使用ASP.NET编程爬取一些目录。要抓取的页面是这样编码的:javascript:__doPostBack('ctl00$MainContent$List','Page$X')其中X是1到180之间的整数。MainContent参数始终相同。我不知道如何爬进这些。我很想在SLE规则中添加一些像allow=('Page$')或attrs='__doPostBack'这样简单的东西,但我想我必须为了从javascript“链接”中提取信息,需要一些技巧。如果更容易从javascript代码中“揭开”每个绝对链接并将它们保存到csv,然后使用该csv将请求加载到新的抓
我使用ScrapyFramework制作了一个网络爬虫,从thiswebsite获取音乐会门票数据.我已经能够成功地从页面上每张票的内部元素中抓取数据,除了只能通过单击“门票”按钮转到门票页面并从门票中抓取票价才能访问的价格在页面上。经过广泛的谷歌搜索,我发现Scrapy.js(基于Splash)可以在Scrapy中使用来与页面上的JavaScript进行交互(例如需要点击的按钮)。我看过一些关于如何使用Splash与JavaScript交互的基本示例,但没有一个示例介绍了Splash与Scrapy的集成(甚至在文档中也没有)。我一直遵循这样的格式,即使用项目加载器将抓取的元素存储在解
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭2年前。Improvethisquestion我想知道是否有类似Scrapyfornodejs的东西?。如果不是,您如何看待使用简单的页面下载并使用cheerio对其进行解析?有没有更好的办法。
我编写了一个蜘蛛,它会抓取网页并填充项目中的字段。该项目具有如下字段classexampleitem():ex1=Field()ex2=Field()ex3=Field()...andsoforth当我抓取并导出到xml文件时,字段的顺序变得困惑并返回类似这样的内容xyzabcghi...soforth我想让xml的格式完全按照它在我的item.py文件的Fields()中写入的顺序进行格式化。过去一个小时左右,我一直在做研究,我知道这与我的管道和使用xmlitemexporter有关,但我完全不知道如何定制我的管道,甚至不知道从哪里开始。简而言之,我在行话中迷路了,如果有人能给我指明
我正在尝试使用scrapy解析sitemap.xml文件,站点地图文件就像下面的文件一样,只有更多的url节点。http://www.site.com/page.htmlhttp://www.site.com/thumb.jpghttp://www.example.com/video123.flvhttp://www.example.com/videoplayer.swf?video=123hereisthepagetitleandanawesomedescription3022011-02-24T02:03:43+02:00w00tawesomeomgwtfbbqkthxby我看了相
我想用scrapy抓取我在我的下载文件夹中的一个本地xml文件,使用xpath提取相关信息。将scrapy简介用作guide2016-01-2412:38:53[scrapy]DEBUG:Retrying(failed2times):[Errno2]Nosuchfileordirectory:'/sayth/Downloads/20160123RAND0.xml'2016-01-2412:38:53[scrapy]DEBUG:Gaveupretrying(failed3times):[Errno2]Nosuchfileordirectory:'/sayth/Downloads/2016
我可以从网站上抓取数据,但我需要将其导出为XML。为此,我定义了一个序列化器,如下所示:classPerson(scrapy.Item):Name=scrapy.Field(serializer=serialize_name)Location=scrapy.Field()还有一个像这样的XMLExportPipeline:classXmlExportPipeline(object):def__init__(self):self.files={}@classmethoddeffrom_crawler(cls,crawler):pipeline=cls()crawler.signals.c
我正在尝试从一个API中抓取多个页面来练习和开发我的XML抓取。出现的一个问题是,当我尝试抓取格式如下的文档时:http://i.imgur.com/zJqeYvG.png并将其存储为XML,但未能这样做。因此,在CMD中,它获取在我的计算机上创建XML文件的URL,但其中没有任何内容。我如何修复它以回显整个文档甚至部分文档?我把代码放在下面:fromscrapy.spiderimportBaseSpiderfromscrapy.selectorimportXmlXPathSelectorfromdoitapi.itemsimportDoItimportrandomclassMySpi
因此,当我将数据导出为XML时,我试图将使用Scrapy从网站上抓取的数据导出为特定格式。这是我希望我的XML的样子:我正在使用以下命令运行我的抓取:$scrapycrawlmy_scrap-oitems.xml-txml我得到的当前输出是这样的:DataHereDataHere如您所见,它正在添加字段,我无法重命名根节点或项目节点。我知道我需要使用XmlItemExporter,但我不确定如何在我的项目中实现它。我试图将它添加到pipelines.py如图所示here但我总是以错误结束:AttributeError:'CrawlerProcess'objecthasnoattribu
scrapy和python的新手,在这里遇到问题。我正在尝试从Metacritic获取完整的PS3游戏列表。这是我的代码:classMetacriticSpider(BaseSpider):name="metacritic"allowed_domains=["metacritic.com"]max_id=10start_urls=["http://www.metacritic.com/browse/games/title/ps3?page="#"http://www.metacritic.com/browse/games/title/xbox360?page=0"]defstart_r