我在这方面搜索了很多,它可能有一个我想念的简单解决方案.
我在本地计算机和服务器上都设置了scrapy + scrapyd.当我尝试"scrapyd"时,它们都可以正常工作.
我可以毫无问题地部署到本地,我也可以从浏览器访问localhost:6800,我可以在本地运行蜘蛛.
在远程运行scrapyd后,我尝试部署到http:// remoteip:6800 /,就像我在本地部署一样,
我明白了
Packing version 1500333306
Deploying to project "projectX" in http://remoteip:6800/addversion.json
Deploy failed: <urlopen error [Errno 111] Connection refused>
Run Code Online (Sandbox Code Playgroud)
我也无法从我的本地PC 访问http:// remoteip:6800 /但我可以从远程PC上的ssh访问(有卷曲)
我在远程服务器上打开了入站和出站连接,我还缺少什么?
谢谢
我正在尝试使用Scrapy登录Facebook.
我已经确定Facebook的移动版本没有javascript,所以我正在使用它.
相关代码是
from loginform import fill_login_form
from scrapy.http import FormRequest
def parse(self, response):
"""Login to Facebook then pass on"""
payload = fill_login_form(
response.request.url, # https://m.facebook.com
response.body,
self.login_user,
self.login_pass
)
return FormRequest.from_response(
response.request.url,
formdata=payload,
formid='login-form',
callback=self.after_login
)
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
File "/XXX/scraps/scraps/spiders/fb.py", line 44, in parse
return FormRequest.from_response(response.request.url, formdata=payload, formid='login-form', callback=self.after_login)
File "/XXX/venv/lib/python3.6/site-packages/scrapy/http/request/form.py", line 42, in from_response
kwargs.setdefault('encoding', response.encoding)
AttributeError: 'str' object has no attribute 'encoding'
Run Code Online (Sandbox Code Playgroud)
Scrapy处于默认设置.
我希望我的蜘蛛登录m.facebook.com.我很确定这只是我的弱谷歌,但我无法确定,如何前进.
我在python scrapy中编写了一个非常小的脚本来解析黄页网站上多个页面显示的名称,街道和电话号码.当我运行我的脚本时,我发现它运行顺利.但是,我遇到的唯一问题是数据在csv输出中被刮掉的方式.它总是两行之间的行(行)间隙.我的意思是:数据每隔一行打印一次.看到下面的图片,你就会明白我的意思.如果不是scrapy,我可以使用[newline =''].但是,不幸的是我在这里完全无助.如何摆脱csv输出中出现的空白行?提前谢谢你看看它.
items.py包括:
import scrapy
class YellowpageItem(scrapy.Item):
name = scrapy.Field()
street = scrapy.Field()
phone = scrapy.Field()
Run Code Online (Sandbox Code Playgroud)
这是蜘蛛:
import scrapy
class YellowpageSpider(scrapy.Spider):
name = "YellowpageSp"
start_urls = ["https://www.yellowpages.com/search?search_terms=Pizza&geo_location_terms=Los%20Angeles%2C%20CA&page={0}".format(page) for page in range(2,6)]
def parse(self, response):
for titles in response.css('div.info'):
name = titles.css('a.business-name span[itemprop=name]::text').extract_first()
street = titles.css('span.street-address::text').extract_first()
phone = titles.css('div[itemprop=telephone]::text').extract_first()
yield {'name': name, 'street': street, 'phone':phone}
Run Code Online (Sandbox Code Playgroud)
以下是csv输出的样子:
顺便说一句,我用来获取csv输出的命令是:
scrapy crawl YellowpageSp -o items.csv -t csv
Run Code Online (Sandbox Code Playgroud) 我试图刮一个只在浮动形式的头文件中接受一些值的API,当我以字符串形式发送它时,它给出400 Bad Request,当我尝试以float形式发送头文件时scrapy给出如下错误:
self.headers = Headers(headers or {}, encoding=encoding)
File "C:\Python27\lib\site-packages\scrapy\http\headers.py", line 12, in __init__
super(Headers, self).__init__(seq)
File "C:\Python27\lib\site-packages\scrapy\utils\datatypes.py", line 193, in __init__
self.update(seq)
File "C:\Python27\lib\site-packages\scrapy\utils\datatypes.py", line 229, in update
super(CaselessDict, self).update(iseq)
File "C:\Python27\lib\site-packages\scrapy\utils\datatypes.py", line 228, in <genexpr>
iseq = ((self.normkey(k), self.normvalue(v)) for k, v in seq)
File "C:\Python27\lib\site-packages\scrapy\http\headers.py", line 27, in normvalue
return [self._tobytes(x) for x in value]
File "C:\Python27\lib\site-packages\scrapy\http\headers.py", line 40, in _tobytes
raise TypeError('Unsupported value type: {}'.format(type(x)))
TypeError: Unsupported value type: <type 'float'>
None
Run Code Online (Sandbox Code Playgroud)
任何人有任何解决方案或面临similer的问题吗?
我正在尝试使用Scrapy下载我的Quora答案,但似乎无法下载我的页面。使用简单
scrapy shell 'http://it.quora.com/profile/Ferdinando-Randisi'
Run Code Online (Sandbox Code Playgroud)
返回此错误
2017-10-05 22:16:52 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: quora)
2017-10-05 22:16:52 [scrapy.utils.log] INFO: Overridden settings: {'NEWSPIDER_MODULE': 'quora.spiders', 'ROBOTSTXT_OBEY': True, 'DUPEFILTER_CLASS': 'scrapy.dupefilters.BaseDupeFilter', 'SPIDER_MODULES': \[quora.spiders'], 'BOT_NAME': 'quora', 'LOGSTATS_INTERVAL': 0}
....
2017-10-05 22:16:53 [scrapy.middleware] INFO: Enabled item pipelines:
[]
2017-10-05 22:16:53 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023
2017-10-05 22:16:53 [scrapy.core.engine] INFO: Spider opened
2017-10-05 22:16:54 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (301) to <GET https://it.quora.com/robots.txt> from <GET http://it.quora.com/robots.txt>
2017-10-05 22:16:55 [scrapy.core.engine] DEBUG: Crawled (429) <GET https://it.quora.com/robots.txt> (referer: None) …Run Code Online (Sandbox Code Playgroud) 我正在使用scrapy刮掉一些大品牌来导入我网站的销售数据.目前我正在使用
DOWNLOAD_DELAY = 1.5
CONCURRENT_REQUESTS_PER_DOMAIN = 16
CONCURRENT_REQUESTS_PER_IP = 16
Run Code Online (Sandbox Code Playgroud)
我使用Item加载器指定css/xpath规则和Pipeline将数据写入csv.我收集的数据是原价,销售价格,颜色,尺寸,名称,图片网址和品牌.
我只为一个拥有大约10万网址的商家写了蜘蛛,这需要我大约4个小时.
我的问题是,对于10k网址,4小时听起来是否正常,或者它应该比这更快.如果是这样,我还需要做些什么来加快速度.
我只在本地使用一个SPLASH实例进行测试.但在生产中我计划使用3个SPLASH实例.
现在主要问题是,我有大约125个商家和每个平均10k产品.他们中的一对有超过150k的网址.
我需要每晚清理所有数据以更新我的网站.由于我的单个蜘蛛花了4个小时来刮掉10k网址,我想知道每晚实现125 x 10k网址是否真的是有效的梦想
我将非常感谢您对我的问题的经验输入.
当我尝试将其部署到云中并遇到以下错误时。
Error: Deploy failed (400):
project: non_field_errors
Run Code Online (Sandbox Code Playgroud)
我当前的设置如下。
def __init__(self, startUrls, *args, **kwargs):
self.keywords = ['sales','advertise','contact','about','policy','terms','feedback','support','faq']
self.startUrls = startUrls
self.startUrls = json.loads(self.startUrls)
super(MySpider, self).__init__(*args, **kwargs)
def start_requests(self):
for url in self.startUrls:
yield Request(url=url)
Run Code Online (Sandbox Code Playgroud) HTML结构是这样的:
<div class="image">
<a target="_top" href="someurl">
<img class="_verticallyaligned" src="cdn.translte" alt="">
</a>
<button class="dui-button -icon" data-shop-id="343170" data-id="14145140">
<i class="dui-icon -favorite"></i>
</button>
</div>
Run Code Online (Sandbox Code Playgroud)
提取文本的代码:
buyers = doc.xpath("//div[@class='image']/a[0]/text()")
Run Code Online (Sandbox Code Playgroud)
输出为:
[]
Run Code Online (Sandbox Code Playgroud)
我做错什么了?
我如何访问变量,var,在fileA中
if __name__ == "__main__":
Run Code Online (Sandbox Code Playgroud)
在另一个文件中,fileB?我试过了:
import fileA
from fileA import main
print (main.var)
import fileA
from fileA import var
print (var)
import fileA
from fileA import __name__
print (__name__.var)
Run Code Online (Sandbox Code Playgroud) 我正在寻找文章标题。我不知道如何提取标题文本。您能否看下面我的代码并提出解决方案。
我是新手。感谢您的帮助!
网页的Web开发人员视图的屏幕快照 https://imgur.com/a/O1lLquY
import scrapy
class BrickSetSpider(scrapy.Spider):
name = "brickset_spider"
start_urls = ['https://www.mckinsey.com/search?q=Agile&start=1']
def parse(self, response):
for quote in response.css('div.text-wrapper'):
item = {
'text': quote.css('h3.headline::text').extract(),
}
print(item)
yield item
Run Code Online (Sandbox Code Playgroud) scrapy ×10
python ×6
web-scraping ×3
python-3.x ×2
csv ×1
facebook ×1
login ×1
lxml ×1
python-2.7 ×1
quora ×1
scrapinghub ×1
scrapyd ×1
web ×1
xpath ×1