我只想在爬行完成时产生一个项目。我正在尝试通过
def spider_closed(self, spider):
item = EtsyItem()
item['total_sales'] = 1111111
yield item
Run Code Online (Sandbox Code Playgroud)
尽管调用了该函数,但它不会产生任何结果。抓取结束后如何生成项目?
我将 selenium 与 Scrapy 一起使用,它会产生太多的日志。
我之前尝试过 SO 提供的几种解决方案,但都没有奏效。基本上我尝试禁用它options并传递service-argument将日志写入文件。在这两种情况下,日志在执行时仍会打印。我如何解决它?
options = Options()
options.headless = True
# options.add_argument('--disable-logging')
self.driver = webdriver.Chrome(r'C:\Python3\selenium\webdriver\chromedriver_win32\chromedriver.exe', chrome_options=options, service_args=["--verbose", "--log-path=D:\\qc1.log"])
Run Code Online (Sandbox Code Playgroud)
我还尝试将服务路径设置为NULL(我运行 Windows)
self.driver = `webdriver.Chrome(r'C:\Python3\selenium\webdriver\chromedriver_win32\chromedriver.exe', chrome_options=options, service_log_path='NUL')`
Run Code Online (Sandbox Code Playgroud)
解决方案: 感谢 - @Manmohan_singh 和 迄今为止唯一有效的答案 添加这个
chrome_options.add_argument("--log-level=3") to shut the logging.
self.driver = webdriver.Chrome(r'C:\Python3\selenium\webdriver\chromedriver_win32\chromedriver.exe', chrome_options=options)
Run Code Online (Sandbox Code Playgroud)
希望这在未来会有用,因为没有一个可能重复的主题对我有帮助,而且 Stack 版主似乎没有仔细阅读这些帖子。
我需要的是找到页面上所有在链接本身中有一些关键字的链接。因此,基于一些堆栈主题,我按如下方式构建我的 xpath:
response.xpath('//a[contains(@href,'/Best-Sellers-Health-Personal-Care')]')
Run Code Online (Sandbox Code Playgroud)
这应该返回一个链接,如 =“ https://www.amazon.com/Best-Sellers-Health-Personal-Care-Tongue ......”
但我总是收到无效的语法错误。我错了什么?所以我现在所做的只是在遍历列表时添加 if contains 检查。但希望有更优雅、更快速的解决方案。
我知道如何在本地工作时从外部源将数据加载到 Scrapy 蜘蛛中。但是我很难找到有关如何将此文件部署到 scrapinghub 以及在那里使用什么路径的任何信息。现在我使用 SH 文档中的这种方法 -在此处输入链接描述但收到 NONE 对象。
import pkgutil
class CodeSpider(scrapy.Spider):
name = "code"
allowed_domains = ["google.com.au"]
def start_requests(self, ):
f = pkgutil.get_data("project", "res/final.json")
a = json.loads(f.read())
Run Code Online (Sandbox Code Playgroud)
谢谢。我的安装文件
from setuptools import setup, find_packages
setup(
name = 'project',
version = '1.0',
packages = find_packages(),
package_data = {'project': ['res/*.json']
},
entry_points = {'scrapy': ['settings = au_go.settings']},
zip_safe=False,
)
Run Code Online (Sandbox Code Playgroud)
我得到的错误。
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/scrapy/core/engine.py", line 127, in _next_request
request = next(slot.start_requests)
File "/tmp/unpacked-eggs/__main__.egg/au_go/spiders/code.py", line 16, …Run Code Online (Sandbox Code Playgroud) 我正在 Python 3 中将文本保存到 csv 文件。文本很干净,没有任何标签。这是它在记事本中的样子:

这是我的文本灯泡:
unicodedata.normalize('NFKD',' '.join(i[1:-1])
).encode('ascii','ignore').decode()
Run Code Online (Sandbox Code Playgroud)
这是我保存它的方法:
def save(filename, data):
with open(r"path to file\{}.csv".format(filename),"a",encoding="utf-8" ) as f:
w = csv.DictWriter(f, [coulm names],lineterminator="\n")
w.writeheader()
w.writerows(data[:10])
Run Code Online (Sandbox Code Playgroud)
当我在 Ipython Pandas 中将文件作为 DataFrame 打开时,我可以看到不同样式的文本,如下所示:

我如何摆脱它并使所有文本看起来都一样?PS 在 gsheets 中一切看起来都很好:
附言。我在 pandas 中使用以下命令:
data_full = pd.read_csv("restaurant_menu_with_entryurl_full.csv", encoding = 'utf8')
Run Code Online (Sandbox Code Playgroud)
在解析过程中,我得到带有json的文本对象响应。它们看起来非常相似。其中一些工作没有任何错误。但是其他人则抛出如下错误。
我试图使用replace('\r\n', '')和, strict=False.无济于事。
这是我从json获取的URL- 在
此处输入链接描述这是我的代码。(第51行是data=json.loads)
另外,当我在scrapy shell中尝试此url时,它会打开为空并引发另一个错误-找不到json文档。不知道这是否重要。
def parse_jsn(self, response):
#inspect_response(response, self)
data = json.loads(response.body_as_unicode())
item = response.meta['item']
item['text']= data[0]['bodyfull']
yield item
Run Code Online (Sandbox Code Playgroud)
这是错误代码。
ValueError: Invalid \escape: line 4 column 942 (char 945)
2017-03-25 17:21:19 [scrapy.core.scraper] ERROR: Spider error processing <GET
or.com/UserReviewController?a=mobile&r=434622632> (referer: https://www.tripa
w-g60763-d122005-Reviews-or490-The_New_Yorker_A_Wyndham_Hotel-New_York_City_N
Traceback (most recent call last):
File "c:\python27\lib\site-packages\scrapy\utils\defer.py", line 102, in it
yield next(it)
File "c:\python27\lib\site-packages\scrapy\spidermiddlewares\offsite.py", l
der_output
for x in result:
File "c:\python27\lib\site-packages\scrapy\spidermiddlewares\referer.py", l
return (_set_referer(r) …Run Code Online (Sandbox Code Playgroud) 无论出于何种原因,所有项目都作为元组返回。不知道我错过了什么。在所有其他蜘蛛和项目中,它只是一个列表(当我使用提取()时)。
{'acne': (None,),
'function': ([u'\u2027Preservative'],),
'function0': u'\u2027Preservative',
'irritant': (None,),
'name': (u'Potassium Sorbate',),
'safety': (u'3',),
'url': 'http://cosdna.com/eng/383bb7435.html'}
Run Code Online (Sandbox Code Playgroud)
这是我的蜘蛛代码。
def parse(self, response):
inspect_response(response, self)
a = response.xpath('//table//tr')
for i in a:
item = CosdnaExtItem()
item['name'] = i.xpath('./td/a/text()').extract_first(),
item['url'] = i.xpath('./td/a/@href').extract_first(),
item['function'] = i.xpath('.//td[2]/span//text()').extract(),
item['acne'] = i.xpath('.//td[3]/span//text()').extract_first(),
item['irritant'] = i.xpath('.//td[4]/span//text()').extract_first(),
item['safety'] = i.xpath('.//td[5]/div//text()').extract_first(),
yield item
Run Code Online (Sandbox Code Playgroud) 当我尝试将其部署到云中并遇到以下错误时。
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) scrapy ×7
python ×2
scrapinghub ×2
ipython ×1
json ×1
pandas ×1
python-2.7 ×1
python-3.x ×1
selenium ×1
xpath ×1